您的位置:首页 > 其它

HDU 1176 免费馅饼

2012-09-17 11:40 295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176

思路:据说是DP题(时间dp)

动态转移:dp[ i ][ j ]+=max(dp[ i+1 ][ j-1 ],dp[ i+1 ][ j ],dp[ i+1 ][ j+1 ]);

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define max(a,b) (a)>(b)?(a):(b)
#define N 100005
int dp
[11];
int main()
{
int n,x,t,i,j,maxt;
while(scanf("%d",&n)&&n)
{
memset(dp,0,sizeof(dp));
maxt=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&t);
dp[t][x]++;
if(maxt<t) maxt=t;
}
for(i=maxt;i>=0;i--)
{
dp[i][0]+=max(dp[i+1][0],dp[i+1][1]);//左边界特殊考虑
for(j=1;j<=9;j++)
dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j]),dp[i+1][j+1]);
dp[i][10]+=max(dp[i+1][9],dp[i+1][10]);//右边界特殊考虑

}
printf("%d\n",dp[0][5]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: