您的位置:首页 > 其它

HDU1176 免费馅饼 经典DP

2015-12-21 21:03 501 查看
题目 地址http://acm.hdu.edu.cn/submit.php?pid=1176

类似i数塔问题,从下往上找

核心思想:
dp[j][i]+=max(dp[j+1][i],dp[j+1][i-1],dp[j+1][i+1])


完整代码

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define maxn 100005
int dp[maxn][11];
int max(int a,int b,int c)
{
if(a>=b&&a>=c)
return a;
if(c>=b&&c>=a)
return c;
if(b>=a&&b>=c)
return b;
}
int main()
{
int n,i,j,T,x,max_t;
while(scanf("%d",&n),n!=0)
{
max_t=-1;
memset(dp,0,sizeof(dp));
for(i=0; i<n; i++)
{
scanf("%d%d",&x,&T);
dp[T][x]++;//add a pie
if(max_t<T)//get max of time
max_t=T;
}
for(j=max_t-1; j>=0; j--)
for(i=0; i<11; i++)
{
if(i==0)
dp[j][i]+=max(0,dp[j+1][i],dp[j+1][i+1]);
else if(i==10)
dp[j][i]+=max(0,dp[j+1][i-1],dp[j+1][i]);
else
dp[j][i]+=max(dp[j+1][i],dp[j+1][i-1],dp[j+1][i+1]);
//printf("%d",dp[j][i]);
}
printf("%d\n",dp[0][5]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: