http://zzgthk.iteye.com/blog/1064434
来源:互联网 发布:人性实验室 网络暴力 编辑:程序博客网 时间:2024/06/14 03:29
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2059
题意:求给出的一系列立方体的高度,用这些立方体来堆塔,求能否得到两个塔高相同的塔?
类型:dp
思路:刚开始做这道题,不会写dp状态转移方程,后来看了大牛的题解,理解之后发现其实是很典型的dp;
首先定义一个dp[2][2010]的数组,dp[i][j],其中i代表上一个状态和下个状态,j代表两个塔之间的差;
更新dp数组:首先对于某一个立方体,有两种放的方式,放在当前比较高的塔上,或者放在比较矮的塔上。每次循环中存放的都是相对较高的塔的高度,即dp[t][j]
那么就有:1、放在当前比较高的塔上,更新dp数组:dp[t][j+a[i]]=max(dp[1-t][j]+a[i],dp[t][j+a[i]];
2、放在当前比较矮的塔上:
2.1、如果a[i]>j,则更新为:dp[t][a[i]-j]=max(dp[t][a[i]-j],dp[1-t][j]+a[i]-j);
2.2、如果a[i]=<j,则更新为:dp[t][j-a[i]]=max(dp[t][j-a[i]],dp[1-t][j]);
代码如下:
#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int a[110];
int dp[2][2010];
int main()
{
int n;
while(scanf("%d",&n)&&(n>0))
{
int sum=0;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
sum=min(sum,2000);
int t=0;
for(int i=0; i<=sum; i++)
dp[0][i]=-1;
dp[0][0]=0;
dp[0][a[1]]=a[1];
for(int i=2; i<=n; i++)
{
t=1-t;
for(int i=0; i<=sum; i++)
dp[t][i]=-1;
for(int j=0; j<=sum; j++)
{
if(dp[1-t][j]!=-1)
{
dp[t][j]=max(dp[t][j],dp[1-t][j]);
if(j+a[i]<sum)
dp[t][j+a[i]]=max(dp[1-t][j]+a[i],dp[t][j+a[i]]);
if(j>=a[i])
dp[t][j-a[i]]=max(dp[1-t][j],dp[t][j-a[i]]);
else
dp[t][a[i]-j]=max(dp[1-t][j]+a[i]-j,dp[t][a[i]-j]);
}
}
}
if(dp[t][0]>0)
cout<<dp[t][0]<<endl;
else
cout<<"Sorry"<<endl;
}
return 0;
}
- http://zzgthk.iteye.com/blog/1064434
- http://beautyhunter.iteye.com/blog/892585
- http://sunwei-07.iteye.com/blog/1139814
- http://fuliang.iteye.com/blog/69313
- http://yueguc.iteye.com/blog/836964
- http://mountain-king.iteye.com/blog/715651
- http://zmx.iteye.com/blog/810138
- http://icyfenix.iteye.com/blog/1119214
- http://xubaolin9.iteye.com/blog/720846
- http://zhousheng193.iteye.com/blog/966912
- http://andy136566.iteye.com/blog/856161
- http://zmm0422.iteye.com/blog/326540
- http://lovezhou.iteye.com/blog/932847
- http://xiaoruanjian.iteye.com/blog/1366851
- http://wanxkl.iteye.com/blog/1170264
- http://yhz61010.iteye.com/blog/1464042
- http://xmuzyq.iteye.com/blog/783218
- http://hwzyyx.iteye.com/blog/992542JPAhibernate
- ZOJ 1081 Points Within
- HDU 5099 Comparison of Android versions【字符串+模拟】
- Android-应用开发-广播和服务(八)
- WPf中多线程改UI
- 图片滚动 LTView
- http://zzgthk.iteye.com/blog/1064434
- Snail—iOS网络学习之得到网络上的数据
- pdo设置和读取数据库连接属性
- J114 8/13
- hdu 5375 gray code
- 甘特图及其绘制软件
- 开始写博客
- 信息系统权限设计二
- UI11_Block传值