HDU-1176 免费馅饼
题目链接:添加链接描述
逆路径dp
#include<bits/stdc++.h>
#define maxx(a,b,c) max(a,max(b,c))
#define MXT 100010
#define MXX 15
int n,dp[MXT][MXX];
using namespace std;
int main()
{
int T,t,x,i,j;
while(scanf("%d",&n),n){
t=0;
memset(dp,0,sizeof dp);
for(i=1;i<=n;i++){
scanf("%d %d",&x,&T);
dp[T][x]++;
if(t<T) t=T;
}
for(i=t;i>=0;i--){
for(j=0;j<=10;j++){
dp[i][j]=maxx(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+dp[i][j];
}
}
printf("%d\n",dp[0][5]);
}
return 0;
}