单调队列
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
POJ-3071-dp,单调队列
题目大意:给定n个数字和m,现在需要把他分成若阁个连续的组,使得每组的的sum都必须要不大于m,问所有组的最大数字之和的最小值是多少;题目解析:一开始看到最大值的最小值就想到了二分,其实大可不必,以后还是要提醒自己以后这种分组的题目大多可以用dp来做,dp[i]=min(dp[j]+max(j+1,j+2.......i)),其中要满足后面的j+1到i的sum要不大于m并且维护最大值,就是单调原创 2017-04-08 00:37:22 · 246 阅读 · 0 评论 -
POJ-1821-单调队列优化dp
题目大意:有n个工人准备铺m个连续的墙,每个工人有他必须图的一面墙壁Si,最多连续铺Li,每铺一个就花费Ci的钱,问最多要多少钱;题目解析:首先肯定将n个工人按照pos排下序,然后定义dp[i][j]表示第i个工人最后图第j块墙壁的最大值,那么dp[i][j]=max(dp[i-1][k]+(j-k)*cost);其中我们需要用单调队列维护dp[i-1][k]-k*cost的最大值,注意k的范原创 2017-04-08 14:56:52 · 406 阅读 · 0 评论 -
HDU3415-单调队列
题目大意:给定n个元素,围成一圈,问最大k个连续的元素之和最大是多少;题目解析:很简单先想到前缀和sum[i]-sum[j],那么i确定的时候,就只需要sum[j]的最小值了,用单调队列来做;AC代码:#include#include#include#include#includeusing namespace std;const int maxn = 200010;co原创 2017-03-30 22:12:31 · 344 阅读 · 0 评论 -
POJ-2373-单调队列优化dp
题目大意:有一块长度为l的草原,你需要用洒水器把所有草坪都覆盖并且每块草坪只能被覆盖一次,有n个奶牛所在的草坪属于[l,r],这些区间只能有一个洒水器;题目解析:定义dp[i]为在第i块草坪结束的时候所苏姚最少的洒水器,dp[i]=min(dp[j]+1),i-2bAC代码:#include#include#include#include#includeusing names原创 2017-04-09 22:15:50 · 865 阅读 · 2 评论