免费馅饼

题目链接:   http://acm.hdu.edu.cn/showproblem.php?pid=1176      

有上个对数塔的理解,这个也可以用数塔处理,大致是相似的:

View Code
# include<stdio.h>
# include<string.h>
int dp[100010][13];
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
int n,i,j,k,m,t;
while(scanf("%d",&n),n)
{
memset(dp,0,sizeof(dp));
k=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&m,&t);
dp[t][m]++;
if(t>k)
k=t;
}
for(i=k-1;i>=0;i--)
{
for(j=0;j<=10;j++)
{
if(j==0)
dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
else if(j==10)
dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j-1]);
else
dp[i][j]=dp[i][j]+max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]));
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}

  

posted on 2011-08-11 09:52  world_ding  阅读(157)  评论(0编辑  收藏  举报