hdu1176 dp
想成数塔 把时间竖的看。
#include<stdio.h> #include<string.h> #define maxn 100010 int max(int x,int y) { return x>y?x:y; } int dp[12][maxn]; int main() { int i,j,n,T; while(scanf("%d",&n)!=EOF) { if(!n)break; T=0; memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { int x,t; scanf("%d%d",&x,&t); if(t>T) T=t; dp[x][t]++; } for(i=T-1;i>=0;i--) { for(j=0;j<=10;j++) { if(j==0) dp[j][i]+=max(dp[j][i+1],dp[j+1][i+1]); else if(j==10) dp[j][i]+=max(dp[j][i+1],dp[j-1][i+1]); else { dp[j][i]+=max(dp[j][i+1],max(dp[j-1][i+1],dp[j+1][i+1])); } } } printf("%d\n",dp[5][0]); } } /* 6 5 3 7 2 9 1 8 1 4 12 7 5 */