题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1059

分析:dp[i][j]表示前i个石头组成两座塔高度差为j的较低塔最大高度

状态转移:

每次石头都有三种方法:

1.放在高塔上:dp[i][j]=max(dp[i][j+t],dp[i][j]);低塔不变

2.放在低塔上:1)dp[i][j]=max(dp[i][j-t],dp[i][j]);低塔仍是较低塔

2)dp[i][j]=max(dp[i][t-j],dp[i][j]);低塔超过高塔

3.低塔高塔都不放

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define inf 1<<30
#define mod 1000000007
using namespace std;
int dp[][];
int main()
{
int n,t;
while(scanf("%d",&n)>)
{
if(n<)break;
memset(dp,-,sizeof(dp));
dp[][]=;
for(int i=;i<=n;i++)
{
scanf("%d",&t);
memcpy(dp[i],dp[i-],sizeof(dp[i-]));
for(int j=;j<=;j++)
{ if(dp[i-][j]!=-)
{
int x=dp[i-][j];
int y=dp[i-][j]+j;
if(x+t<=y)
{
dp[i][j-t]=max(dp[i][j-t],x+t);
}
else
{
dp[i][t-j]=max(dp[i][t-j],y);
}
dp[i][j+t]=max(dp[i][j+t],x);
}
}
}
if(dp[n][]<=)puts("Sorry");
else printf("%d\n",dp[n][]);
}
}

为了节省空间,还可以用滚动数组来实现dp

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define inf 1<<30
#define mod 1000000007
using namespace std;
int dp[][];
int main()
{
int n,t;
while(scanf("%d",&n)>)
{
if(n<)break;
memset(dp,-,sizeof(dp));
dp[][]=;
int pre=,now=;
for(int i=;i<=n;i++)
{
scanf("%d",&t);
memcpy(dp[now],dp[pre],sizeof(dp[now]));
for(int j=;j>=;j--)
{
if(dp[pre][j]!=-)
{
int x=dp[pre][j];
int y=dp[pre][j]+j;
if(x+t<=y)
{
dp[now][j-t]=max(dp[now][j-t],x+t);
}
else
{
dp[now][t-j]=max(dp[now][t-j],y);
}
dp[now][j+t]=max(dp[now][j+t],x);
}
}
swap(pre,now);
}
if(dp[pre][]<= )puts("Sorry");
else printf("%d\n",dp[pre][]);
}
}

zoj2059(经典dp)的更多相关文章

  1. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

  2. poj1458 求最长公共子序列 经典DP

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45763   Accepted: 18 ...

  3. NYOJ - 矩形嵌套(经典dp)

    矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...

  4. 51nod 1412 AVL树的种类(经典dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...

  5. NYOJ 16 矩形嵌套(经典DP)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms  |           内存限制:65535 KB 难度: ...

  6. poj 1050 To the Max 最大子矩阵和 经典dp

    To the Max   Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

  7. CS Academy Distinct Neighbours(经典dp)

    CS Academy Distinct Neighbours(经典dp) 题意: 求相邻无相同数字的合法的排列数 题解: 题解 先将相同的数字分为一类,假设共有n组 定义\(dp[i][j]\)表示前 ...

  8. 【经典dp 技巧】8.13序列

    经典的拆绝对值 题目大意 给定$n$个具有顺序的序列,允许对每个序列循环移动.记第$i$个序列尾元素为$x$,$i+1$个序列首元素为$y$,定义其连接收益为$|x-y|*i$,求$n$个序列连接最大 ...

  9. POJ 1160:Post Office 邮局经典DP

    Post Office Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17168   Accepted: 9270 Desc ...

随机推荐

  1. C# webBrowser操作 javascript

    using System; using System.Windows.Forms; namespace Demo { public partial class Form1 : Form { publi ...

  2. SQLiteLog (1) no such Column:

           今天在进入sqlite数据库查询的时候出现了这个问题,SQLiteLog (1) no such Column: BGZ 搜索得知这是因为数据库中没有这一列,我的sql语句为" ...

  3. Oracle判断指定列是否全部为数字

    select nvl2(translate(name,'\1234567890 ', '\'),'is   characters ','is   number ') from customer_inf ...

  4. css3圆角代码

    div+css3普通圆角代码示例 <style type="text/css"> #round { width:200px; height:100px; margin: ...

  5. 奇怪的问题,InvalidateRect最后一个参数在XP下无效

    一直用的WIN2K系统,写的一个程序在本机正常,到XP系统的机器运行发现调整窗口大小时界面闪得厉害,程序比较大,而且这种闪烁还不好调试,因为单步调试没有闪烁效果,只能排除法找原因,最后以为找到原因了, ...

  6. MySQL备份方案-->(利用mysqldump以及binlog二进制日志)

                                                         MySQL备份方案-->(利用mysqldump以及binlog二进制日志) 随着数据不 ...

  7. Delphi图像处理 -- 最大值

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

  8. sql语句查询添加自增列

    SELECT Row_Number() over ( order by getdate() ) as '序号', * FROM  T_Cod_XQ

  9. HDU - 4944 FSF’s game

    Problem Description FSF has programmed a game. In this game, players need to divide a rectangle into ...

  10. 5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份

     第一层因素: mysql的自身的设置 mysql有六处使用了字符集.分别为:client .connection.database.results.server .system. mysql&g ...