hdu-acm steps 免费馅饼
/*dp入门级的题目,和数塔是一样的,这道题不用做什么优化,感觉时间复杂度不会超。主要还是细节上的问题,
这道题的状态和状态方程都容易找到,采用自底向上的方式会好很多*/
#include"iostream"
#include"algorithm"
#include"stdio.h"
#include"string.h"
#include"cmath"
#include"queue"
#define mx 100005
using namespace std;
int dp[13][mx];//刚开始把13和mx写反了。。。wa了两次
int n;
int Max(int c,int b)
{
if(c>b) return c;
else return b;
}
int main()
{
while(cin>>n,n)
{
int i,j,k;
memset(dp,0,sizeof(dp));
int x,t,t1;
t=0;
for(i=0;i<n;i++)
{
cin>>x>>t1;
dp[x+1][t1]++;
if(t1>t) t=t1;//这里要注意输入不一定是按时间递增的顺序
}
for(i=t;i>0;i--)
for(j=1;j<=11;j++)
{
dp[j][i-1]+=Max(dp[j-1][i],Max(dp[j][i],dp[j+1][i]));
}
cout<<dp[6][0]<<endl;
}
return 0;
}