动态规划专项advanced:LA 4625
2013-08-19 00:32
323 查看
这道题要求解的问题是使最大值最小的问题,所以可以加一个参数加以限制,然后判断是否可行用二分的方法求解答案。
这里二分每个half-segment上的最大重量,然后剩下来需要做的就是判断是否存在一个方案满足该条件。容易想到的是贪心,即每一段取尽量多的pieces,看m-1段能否将pieces全部取完,然而这个贪心是错的。
看这样一个例子:n=8,m=4,d=10,w[]={7,7,1,1,5,5,1,1}。按上述贪心,结果为7,然而不难发现正确答案应为10。
经过观察发现,若按上述贪心得到的段数与m-1同奇偶,则结论成立,因为可以将其中一段拆成2段,不会影响结论。
得到上述的性质就可以通过一个二维dp[i][j(0<=i<=n,0<=j<=1)]求解出取到第i个pieces时,所需奇偶性与j相同的最短段数。最后判断dp
[(m-1)%2]<m即可。
这里二分每个half-segment上的最大重量,然后剩下来需要做的就是判断是否存在一个方案满足该条件。容易想到的是贪心,即每一段取尽量多的pieces,看m-1段能否将pieces全部取完,然而这个贪心是错的。
看这样一个例子:n=8,m=4,d=10,w[]={7,7,1,1,5,5,1,1}。按上述贪心,结果为7,然而不难发现正确答案应为10。
经过观察发现,若按上述贪心得到的段数与m-1同奇偶,则结论成立,因为可以将其中一段拆成2段,不会影响结论。
得到上述的性质就可以通过一个二维dp[i][j(0<=i<=n,0<=j<=1)]求解出取到第i个pieces时,所需奇偶性与j相同的最短段数。最后判断dp
[(m-1)%2]<m即可。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=40010; const int inf=1<<30; int n,m,d; int w[maxn],s[maxn]; int dp[maxn][2]; bool judge(int x) { dp[0][0]=0;dp[0][1]=inf; for(int i=2;i<=n;i+=2) { dp[i][0]=dp[i][1]=inf; for(int len=1;2*len<=i;len++) { if(s[i]-s[i-len]>x) break; if(s[i-len]-s[i-2*len]<=x) { dp[i][0]=min(dp[i][0],dp[i-2*len][1]+1); dp[i][1]=min(dp[i][1],dp[i-2*len][0]+1); } } } return dp [(m-1)%2]<m; } int main() { //freopen("in.txt","r",stdin); int T; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&d); s[0]=0; for(int i=1;i<=n;i++) { scanf("%d",&w[i]); s[i]=s[i-1]+w[i]; } if(n%2==1) { puts("BAD"); continue; } if(2*(m-1)>n) { puts("BAD"); continue; } if(2*d*(m-1)<n) { puts("BAD"); continue; } int L=0,R=s ; while(L<R) { int mid=L+(R-L)/2; if(judge(mid)) R=mid; else L=mid+1; } printf("%d\n",R); } return 0; }
相关文章推荐
- 动态规划专项advanced:LA 4394
- 动态规划专项intermediate:LA 4327
- 动态规划专项intermediate:LA 4015
- 动态规划专项intermediate:UVa 10981
- 动态规划专项intermediate:UVa 11400
- 动态规划专项练习(2017082899)
- 动态规划专项intermediate:UVa 10934
- G - Zombie’s Treasure Chest(动态规划专项)
- 动态规划专项intermediate:UVa 10599
- LA 3720 highway(利用动态规划思想,将复杂度急降,9ms)
- 动态规划专项intermediate:UVa 10271
- 动态规划经典文章:Dynamic Programming: From novice to advanced
- LA 2038 战略游戏(树的动态规划基础题/无根树转有根树/树的最大最小结点集)
- 动态规划,记忆化搜索(分享巧克力,LA 4794)
- A - Space Elevator(动态规划专项)
- 动态规划,单调队列(捡垃圾的机器人,LA 3983)
- 动态规划专项intermediate:UVa 11600
- 动态规划专项训练(2)
- 动态规划专项intermediate:UVa 12002
- K - Balance(动态规划专项)