http://acm.hdu.edu.cn/showproblem.php?pid=1176
当初DP第一题,写的太挫了,不高兴改了- -#
#include<stdio.h> #include<string.h> #define maxer(a,b) ((a)>(b)?(a):(b)) int dp[100001][12]; int max(int a,int b,int c) { return maxer(a,b)>maxer(b,c)?maxer(a,b):maxer(b,c); } int main(void) { int n,a,b,i,j,maxsec; while(scanf("%d",&n),n) { memset(dp,0,sizeof(dp)); maxsec=0; for(i=0;i<n;i++) { scanf("%d %d",&a,&b); dp[b][a+1]++; maxsec=maxsec>b?maxsec:b; } for(i=maxsec-1;i>=0;i--) for(j=11;j>=1;j--) dp[i][j]+=max(dp[i+1][j],dp[i+1][j-1],dp[i+1][j+1]); printf("%d\n",dp[0][6]); } return 0; }