[SCU 4512] Goozy的积木 (状态优化DP)
2016-05-23 13:20
295 查看
SCU - 4512
有若干个积木,你可以选择将他放在 A塔,放在 B塔,或者不放求在两塔高度相等的情况下,所能达到的最大高度
朴素的想法是 dp[i][H1][H2]表示使用前 i个积木
A塔高度为 H1,B塔高度为 H2,dp存的是能否到达这个状态的一个 bool值
首先这样状态爆炸,所以依旧要合理调整状态位置
我们可以把最高塔的高度移到 dp存的最优值里,
然后状态里表示一下两塔的高度差,因为根据高度差能算出次高塔的高度
这样一来状态表示就变为了二维,
即dp[i][d]表示使用前 i个积木,两塔高度差为 d,较高塔的高度最高为多少
最后答案即为 dp
[0]
#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <queue> using namespace std; typedef pair<int,int> Pii; typedef long long LL; typedef unsigned long long ULL; typedef double DBL; typedef long double LDBL; #define MST(a,b) memset(a,b,sizeof(a)) #define CLR(a) MST(a,0) #define Sqr(a) (a*a) const int maxv=5e5+10; int N; int inpt[100]; int dp[2][maxv]; int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); #endif int T; scanf("%d", &T); for(int ck=1; ck<=T; ck++) { scanf("%d", &N); for(int i=1; i<=N; i++) scanf("%d", &inpt[i]); MST(dp,-1); dp[0][0]=0; for(int i=1; i<=N; i++) { int cur=i&1,las=(i-1)&1; for(int j=0; j<maxv; j++) dp[cur][j]=dp[las][j]; for(int j=0; j<maxv; j++) { if(dp[las][j]==-1) continue; int H=dp[las][j], L=dp[las][j]-j; if(L+inpt[i]<maxv) { int tD=abs(L+inpt[i]-H); int tH=max(L+inpt[i],H); dp[cur]=max(dp[cur] , tH); } if(H+inpt[i]-L<maxv) { dp[cur][H+inpt[i]-L]=max(dp[cur][H+inpt[i]-L], H+inpt[i]); } } } if(dp[N&1][0]) printf("%d\n", dp[N&1][0]); else puts("GG"); } return 0; } 相关文章推荐
- 详解Android应用中屏幕尺寸的获取及dp和px值的转换
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android dpi,dip,dp的概念以及屏幕适配
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题