http://acm.hdu.edu.cn/showproblem.php?pid=1176

DP,数塔变形题。

//pie[i][j]表示在i秒在j坐标处最多能接到的馅饼数

#include 
<iostream>
#include 
<algorithm>
using namespace std;
const int N = 100001;
const int P = 12;
int pie[N][P];
int main()
{
    
int n;
    
while(scanf("%d",&n)&&n!=0)
    {
        
int t,m,maxt=-1;
        memset(pie, 
0sizeof(pie));
        
while(n--)
        {
            scanf(
"%d%d",&m,&t);
            pie[t][m]
++;
            
if(t>maxt)
            {
                maxt 
= t;
            }
        }
        
//dp
        for(int i=maxt;i>0;i--)
         
for(int j=0;j<=10;j++)
         {
             
if(j==0)
             {
                 pie[i
-1][j]+=max(pie[i][j],pie[i][j+1]);
             }
             
else if(j==10)
             {
                 pie[i
-1][j]+=max(pie[i][j],pie[i][j-1]);
             }
             
else
             {
                 
int temp = max(pie[i][j],pie[i][j+1]);
                 pie[i
-1][j]+=max(temp,pie[i][j-1]);
             }
         }
         cout
<<pie[0][5]<<endl;
    }
    
return 0;
}