vijos 1037 ***
2015-07-11 11:56
211 查看
链接:点我
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int v = 2000 + 5; const int MaxN = 100 + 5; int N, sum, num[MaxN], dp[2][v]; int main() { int i, j, k; cin >> N; for(i = 0; i < N; ++i) { cin >> num[i]; sum += num[i]; } memset(dp, -1, sizeof(dp)); dp[1][0] = 0; int a; for(i = 0; i < N; ++i) { a = i % 2; memset(dp[a], -1, sizeof(dp[a])); for(j = 0; j <= sum; ++j) { //1.不放第i块水晶; if(dp[a ^ 1][j] > -1) dp[a][j] = dp[a ^ 1][j]; //2.放进去后,高塔变矮塔(第i块放在矮塔上了); if(num[i] > j && dp[a ^ 1][num[i] - j] > -1) dp[a][j] = max(dp[a][j], dp[a ^ 1][num[i] - j] + j); //3.放进去后,高塔仍高(第i块放在矮塔上); if(j + num[i] <= sum && dp[a ^ 1][j + num[i]] > -1) dp[a][j] = max(dp[a][j], dp[a ^ 1][j + num[i]]); //4.放进去后,高塔更高(第i块放在高塔上). if(j >= num[i] && dp[a ^ 1][j - num[i]] > -1) dp[a][j] = max(dp[a][j], dp[a ^ 1][j - num[i]] + num[i]); } } if(dp[a][0] > 0) cout << dp[a][0] << endl; else cout << "Impossible" << endl; }
相关文章推荐
- JQuery简介及语法学习笔记
- springmvc之HelloWorld
- C语言,如何检查文件是否存在和权限的信息
- [leedcode 47] Permutations II
- IOS WebView中JS和OC相互调用
- 树莓派 和 电脑共用显示屏 无屏幕玩转树莓派
- Windows下设置tomcat自动重启
- HTML(个人学习笔记,不断跟新修改中)
- cocos2d 缓存池 对象的再利用
- linux nc命令详解
- UI1_UIButton
- 数组根据index拆分和查询下标
- python检查字符串是否是正确ISBN的方法
- Linux的常用文件传输方式介绍与比较
- DB2完美导出SqlServer数据库.NET(C#)
- 独家分享——大牛教你如何学习Web前端开发
- B树、B+树、B*树
- KUKA youbot机械臂与Moveit工具包(3)
- windows 安装 go语言
- Linux磁盘管理:LVM逻辑卷的创建及使用