S o l u t i o n \mathcal{Solution} Solution

设当前砍到了第 2 2 2 个怪物,
代价 为 ( a i + d ) ( b i + d ) = a i b i + a i d + d b i + d 2 = a i b i + d ( a i + b i ) + d 2 (a_i+d)(b_i+d)=a_i b_i + a_i d + db_i+d^2=a_ib_i+d(a_i+b_i)+d^2 (ai​+d)(bi​+d)=ai​bi​+ai​d+dbi​+d2=ai​bi​+d(ai​+bi​)+d2
发现只有 d ( a i + b i ) d(a_i+b_i) d(ai​+bi​) 是会变的量, 基于 贪心 思路, 使 ( a i + b i ) (a_i+b_i) (ai​+bi​) 在 d d d 比较大时尽量小 .

于是按照 a i + b i a_i+b_i ai​+bi​ 从大到小排序 ( 第 一 步 ) \ \ \ \ \ \ \ (第一步)        (第一步)

光排序还不够, 还需要进行简单的 d p dp dp,
设 d p [ i , j ] 表 示 前 i 个 砍 j 个 所 需 要 的 最 小 代 价 dp[i, j] 表示前 i个砍j个所需要的最小代价 dp[i,j]表示前i个砍j个所需要的最小代价
d p [ i , j ] = d p [ i − 1 , j − 1 ] + [ a i + ( i − 1 ) d ] ∗ [ b i + ( i − 1 ) d ] dp[i,j]=dp[i-1, j-1]+[a_i+(i-1)d]*[b_i+(i-1)d] dp[i,j]=dp[i−1,j−1]+[ai​+(i−1)d]∗[bi​+(i−1)d]
得到 d p [ N , 1... N ] dp[N, 1...N] dp[N,1...N] 后 二分查找 即可


C o d e \mathcal{Code} Code

#include<bits/stdc++.h>
#define reg registertypedef long long ll;int read(){char c;int s = 0, flag = 1;while((c=getchar()) && !isdigit(c))if(c == '-'){ flag = -1, c = getchar(); break ; }while(isdigit(c)) s = s*10 + c-'0', c = getchar();return s * flag;
}ll read_l(){char c;ll s = 0, flag = 1;while((c=getchar()) && !isdigit(c))if(c == '-'){ flag = -1, c = getchar(); break ; }while(isdigit(c)) s = s*10 + c-'0', c = getchar();return s * flag;
}const int maxn = 3005;int N;
int M;
int D;ll dp[maxn][maxn];struct Node{ int a, b; } A[maxn];bool cmp(Node x, Node y){ return x.a+x.b > y.a+y.b; }int main(){freopen("hunter.in", "r", stdin);freopen("hunter.out", "w", stdout);N = read();M = read();D = read();for(reg int i = 1; i <= N; i ++) A[i].a = read();for(reg int i = 1; i <= N; i ++) A[i].b = read();std::sort(A+1, A+N+1, cmp);memset(dp, 0x3f, sizeof dp);for(reg int i = 0; i <= N; i ++) dp[i][0] = 0;for(reg int i = 1; i <= N; i ++)for(reg int j = 1; j <= i; j ++)dp[i][j] = std::min(dp[i-1][j], dp[i-1][j-1] + 1ll*(A[i].a+1ll*D*(j-1))*(A[i].b+1ll*D*(j-1)));for(reg int i = 1; i <= M; i ++)printf("%d ", std::lower_bound(dp[N]+1, dp[N]+N+1, read_l())-dp[N]-1);return 0;
}

怪物猎人[贪心+dp]相关推荐

  1. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校,补多校的题目,刷一下一直薄弱的DP.多校如果有计算几何一定要干掉-.- 题意:给 ...

  2. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...

  3. 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp

    题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...

  4. HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)

    开始还觉得是贪心呢...  给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d  d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面  d=1:你只能把 ...

  5. 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]

    巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MB [Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑 ...

  6. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列

    附上题目链接:杭电oj1257 这个题目有动态规划和贪心两种解决方式. 贪心法1: 对于导弹我们知道只可以从大到小的反导,一个系统必须从大到小排列.那么我们就可以选择从最高的那个导弹入手,往右找仅次于 ...

  7. CF1155D Beautiful Array 贪心,dp

    CF115DBeautiful Array 题目大意:给一个有n个元素的a数组,可以选择其中一个区间的所有数都乘上x,也可以不选,求最大子序列和. 如果没有前面的操作,就是只求最大子序列和,我们都知道 ...

  8. CodeForces - 1481E Sorting Books(贪心+dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...

  9. 2020ICPC(小米邀请赛2) - Knapsack(贪心+dp)

    题目链接:点击查看 题目大意:给出 n 个物品,每个物品都有体积和价值,现在问容量为 m 的背包最多可以装下多少价值的物品 题目分析:本题正解应该是斜率优化dp,然鹅看了大佬们的博客讲解后,感觉不是自 ...

最新文章

  1. 如何快速测试与数据库的连接并得到连接字符串
  2. 安卓application_阿里面试官刁钻连问:安卓 UID的分配、查看及相关知识
  3. linux accept过程,Linux协议栈accept和syn队列问题
  4. 201521123032 《Java程序设计》第7周学习总结
  5. python创建excel_python自动生成excel(xlwt库)
  6. html+dom+深入,DOM 深入学习 - 1
  7. Linux系统编程3:基础篇之详解Linux软件包管理器yum
  8. Nagios之linux监控windows主机
  9. 超快语义分割 | PP-LiteSeg集速度快、精度高、易部署等优点于一身,必会模型!!!...
  10. django mysql 读写分离
  11. 戴尔vStart:加快虚拟化,并马上应用戴尔私有云
  12. iso硬盘安装 凤凰os_Windows硬盘安装凤凰系统(Phoenix OS)可以用电脑玩吃鸡啦~
  13. python———两个栈实现一个队列
  14. Linux Apache服务详解——Apache服务基础知识
  15. SAP 安全证书的导入
  16. library netcdf 路径_科学网—NetCDF安装记录 - 丁鹏基的博文
  17. Android 10.0锁屏界面默认不显示Notification通知
  18. rk3066 android4.4,Rooting the Cube U30GT rk3066 android tablet
  19. 6.1电机,串口控制,PWM调速
  20. ds12c887程序C语言,单片机+TM1628+DS12C887时钟源程序

热门文章

  1. 基于LINUX数控系统,基于Linux+RT—Linux的数控系统研究
  2. ftp服务器显示已连接又丢失,连接FTP与服务器连接被重置
  3. SHOP++ V9.1商城系统:可视化装修,0基础也能打造高颜值商城!
  4. 模型评估指标之间的一些联系
  5. linux:命令su、exit、sudo登入、退出用户、临时root权限详解。
  6. android 刷机后熄屏断网
  7. 软件构造lab1总结
  8. date日期格式化 java_Java关于时间和日期格式化的方法
  9. linux上配置达梦ODBC
  10. b区211大学计算机调剂,211本科生389分调剂到B区院校还被拒?低分考生想读研是否太难?...