POJ 2609 DP 双队列DP】的更多相关文章

Ferry Loading Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1807   Accepted: 509   Special Judge Description Before bridges were common, ferries were used to transport cars across rivers. River ferries, unlike their larger cousins, run…
#include <iostream> using namespace std; + ; int S, N; int T[MAX_N], F[MAX_N]; int sum_F[MAX_N]; int dp[MAX_N]; int solve() { ; j >= ; --j) { int f = sum_F[N] - sum_F[j], t = S; ; j + i <= N && i <= ; i++) { t += T[j + i - ]; dp[j]…
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移比较显然,dp[i] = min{dp[j] + max(a[j + 1] , a[j + 2] ... + a[i])}, 其中a[j + 1] + a[j + 2] +... + a[i] <= m;这个dp转移是O(n^2)的,我们需要用单调队列优化.单调队列维护的是a值单调递减的序列(要保证…
Cut the Sequence Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8764   Accepted: 2576 Description Given an integer sequence { an } of length N, you are to cut the sequence into several parts every one of which is a consecutive subseque…
题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂色到j的最大的val是多少. 转移就是dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) 和dp[i][j] = max(dp[i][j], dp[i - 1][z] + (j - z) * p[i]); 当然z是有条件范围的,这个请自己找... 然后这样子转移的话…
给出一个n长度的区间,然后有一些小区间只能被喷水一次,其他区间可以喷水多次,然后问你要把这个区间覆盖起来最小需要多少喷头,喷头的半径是[a, b]. 对于每个只能覆盖一次的区间,我们可以把他中间的部分标记起来,每次只在他的两端放置喷头,中间的点不能放置多余的喷头,然后找状态方程 dp[i] = 到第i个位置最少的喷头 然后dp[i] = min(dp[j])+1 2*b<=i-j<=2*a 然后用单调队列维护最小值,就可以了 #include<map> #include<se…
题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂完前j个位置的最大收益. 然后转移考虑 第i个人可以不刷.dp[i][j]=dp[i-1][j]; 第j个木板可以不刷dp[i][j]=dp[i][j-1]; 然后当c[i].s<=j<=s[i]+l[i]-1时 dp[i][j]=p[i]*j+max(dp[i-1][k]-p[i]*k)其中j-…
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the sequence into several parts every one of which is a consecutive subsequence of the original sequence. Every part must satisfy that the sum of the intege…
http://poj.org/problem?id=2373 题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草区域内不允许有雨伞间隙,即只能被1把雨伞覆盖,求将n块田都覆盖的最少雨伞数. 分析: 易写出dp式子,dp[i]表示覆盖[0,i]需要的最少雨伞数量—— 若i不为某一奶牛的领地:dp[i]=min(dp[j])+1,i-2b<=j<=1-2a,且j不属于某一只奶牛的领地 若i为某一奶牛的领地:dp…
LINK 题意:有1个产品,m个步骤编号为1~m.步骤要在n个机器人的手中生产完成.其中,第i个步骤在第j个机器人手中的生产时间给定为$T[i][j]$,切换机器人消耗cost.步骤必须按顺序,同一个机器人不能连续完成超过l个步骤.求完成所有步骤的最短时间是多少.其中$m<=10^5$,$n<=5$,$l<=5*10^4$ 思路:这题用DP考虑易得一个转移方程$dp[i][j]=\min^{i-1}_{v=i-L}{(dp[v][x] + sum[i][j] - sum[v][j]) +…