zoj2059 The Twin Towers(经典的DP)
来源:互联网 发布:新疆4g网络停用真相 编辑:程序博客网 时间:2024/05/30 23:02
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1059
经典的DP,不会做啊 (╬ ̄皿 ̄)凸
。。。。。。。。。。。
设dp[j]表示高度差为j时,矮塔的高度。
对于每个块x,只有两种放法,1)放到高塔上 2)放到矮塔上
采用滚动数组,维护两个一维数组就可以了。
Code:
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define min(a,b) a<b ? a:b#define max(a,b) a>b ? a:busing namespace std;const int H = 2000;int dp[2][2010];//dp[][j]表示高度差为j时,矮塔的高度。int x;int main(){ int n, i, j, t; while(scanf("%d",&n)&&n!=-1) { memset(dp,-1,sizeof(dp)); dp[0][0] = 0; for(i=1,t=0; i<=n; i++) { t = 1-t; scanf("%d",&x); for(j=0; j<=H; j++) if(dp[1-t][j]!=-1) { //更新高度差为j时,矮塔的高度 dp[t][j] = max(dp[1-t][j], dp[t][j]); //把高为x的块加到高塔上 if(j+x<H) dp[t][j+x] = max(dp[t][j+x], dp[1-t][j]); //把高为x的块加到矮塔上 if(j>=x)//加到矮塔的上面比高塔的低 dp[t][j-x] = max(dp[t][j-x], dp[1-t][j]+x); else //加到矮塔的上面比高塔的高 { dp[t][x-j] = max(dp[t][x-j], dp[1-t][j]+j); } } } if(dp[t][0]>0) printf("%d\n",dp[t][0]); else printf("Sorry\n"); } return 0;}
- zoj2059 The Twin Towers(经典的DP)
- ZOJ2059 The Twin Towers,DP
- zoj2059 The Twin Towers (dp)
- uva10066 - The Twin Towers(dp,lcs)
- UVA 10066 The Twin Towers(dp + LCS)
- UVa 10066 The Twin Towers (DP&LCS)
- zoj 2059 The Twin Towers(DP)
- uva--10066The Twin Towers +dp
- ZOJ 2059 The Twin Towers(dp)
- ZOJ 2059 The Twin Towers(双塔DP)
- UVA.10066 The Twin Towers (DP LCS)
- The Twin Towers
- 10066 - The Twin Towers
- 10066 - The Twin Towers
- BNU The Twin Towers
- UVaOJ_10066 - The Twin Towers
- UVA10066 - The Twin Towers
- UVA 10066 The Twin Towers 双塔 LCS,dp
- Ubuntu 安装wine时停止在"正在设定ttf-mscorefonts-installer"解决方法
- 4.Linux下安装JDK
- android 利用压缩方法对doc文件加解密
- Java Request方法总结
- Java 类集框架
- zoj2059 The Twin Towers(经典的DP)
- 5.开机自动启动Oracle
- jquery indexOf使用方法
- 【转载】cocos2d-x 触屏机制,对单点和多点分析的很清楚
- NYOJ 399 整除个数 2013年8月20日
- Delphi 日期操作(日期时间差、年份增加1)
- 你想建设一个能承受500万PV/每天的网站吗?如果计算呢?
- 程序员的技术博客一定要写好
- 6.Oracle小版本升级