博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vijos 1037 ***
阅读量:4313 次
发布时间:2019-06-06

本文共 1404 字,大约阅读时间需要 4 分钟。

链接:

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 const int v = 2000 + 5; 7 const int MaxN = 100 + 5; 8 int N, sum, num[MaxN], dp[2][v]; 9 int main() {10 int i, j, k;11 cin >> N;12 for(i = 0; i < N; ++i) {13 cin >> num[i];14 sum += num[i];15 }16 memset(dp, -1, sizeof(dp));17 dp[1][0] = 0;18 int a;19 for(i = 0; i < N; ++i) {20 a = i % 2;21 memset(dp[a], -1, sizeof(dp[a]));22 for(j = 0; j <= sum; ++j) {23 //1.不放第i块水晶;24 if(dp[a ^ 1][j] > -1)25 dp[a][j] = dp[a ^ 1][j];26 //2.放进去后,高塔变矮塔(第i块放在矮塔上了);27 if(num[i] > j && dp[a ^ 1][num[i] - j] > -1)28 dp[a][j] = max(dp[a][j], dp[a ^ 1][num[i] - j] + j);29 //3.放进去后,高塔仍高(第i块放在矮塔上);30 if(j + num[i] <= sum && dp[a ^ 1][j + num[i]] > -1)31 dp[a][j] = max(dp[a][j], dp[a ^ 1][j + num[i]]);32 //4.放进去后,高塔更高(第i块放在高塔上).33 if(j >= num[i] && dp[a ^ 1][j - num[i]] > -1)34 dp[a][j] = max(dp[a][j], dp[a ^ 1][j - num[i]] + num[i]);35 }36 }37 if(dp[a][0] > 0)38 cout << dp[a][0] << endl;39 else40 cout << "Impossible" << endl;41 }

 

转载于:https://www.cnblogs.com/cnblogs321114287/p/4638345.html

你可能感兴趣的文章
jquery简单开始
查看>>
IOS 在不打开电话服务的时候,可以响应服务器的推送消息,从而接收服务器的推送消息...
查看>>
置顶的博客
查看>>
ionic2 native app 更新用户头像暨文件操作
查看>>
SQL Server R2 地图报表制作(一)
查看>>
ZeroMQ——一个轻量级的消息通信组件
查看>>
JavaScript中数组和json的复制
查看>>
C语言多线程编程二
查看>>
转载:从集群计算到云计算
查看>>
服务器文件管理
查看>>
作业2
查看>>
ios上架报错90080,90087,90209,90125 解决办法
查看>>
给button添加UAC的小盾牌图标
查看>>
如何退出 vim
查看>>
Robberies
查看>>
get post 提交
查看>>
R安装
查看>>
跟我一起学C++
查看>>
Android自动化测试之环境搭建
查看>>
JavaScript运算符
查看>>