题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1176题意:
有一条长11的路径,n个馅饼掉下来,每秒钟站在i处可以够到i,i+1,i-1三处其中之一的馅饼,每秒可以移动一次,一开始在5位置。求最大馅饼数。
思路:
dp[i][j]为i秒时在j处拿到的最大馅饼数,一开始储存没处每秒的馅饼数,然后倒推回来,dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])。代码:
#define N 112345
int n,m;
int dp[N][13];
int main()
{
int i,j,k,kk,t,x,y,z;
while(scanf("%d",&n)!=EOF&&n)
{
memset(dp,0,sizeof(dp));
for(i=0,m=0;i<n;i++)
{
scanf("%d%d",&x,&y);
dp[y][x+1]++;
m=max(m,y);
}
for(i=m-1;i>=0;i--)
for(j=1;j<=11;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][6]);
}
return 0;
}