这道题考察dp的基础,开始没注意l1==l2&&m1<m2 的情况wa了一次 Memory: 324K Time: 0MSLanguage: G++ Faults:1 wa Algorithm:DP /* *我的做法是从底至上 */ #include<memory.h> #include<stdio.h> #define N 102 int lm[N][N]; bool input() { int n,l,m; memset(lm,0,sizeof(lm)); scanf("%d",&n); if(!n) return false; for(int i=0; i<n; i++) { scanf("%d%d",&l,&m); lm[l][m]++; } return true; } int dp() { int max; for(int i = 0; i < 101; i++) { max=lm[i][1]; //更新下一行的头节点 lm[i+1][1]+=max; max = lm[i+1][1]; for(int j = 2; j < 101; j++) { if(lm[i][j]>max) max = lm[i][j]; //更新下一行同一列的点 lm[i+1][j]+=max; max = lm[i+1][j]; } } return max; } int main() { while(input()) printf("%d/n",dp()); printf("*/n"); return 0; }