注解
1、本题类似于数塔的思想,从下往上找!
2、dp[i],[j]表示第j秒第i个位置的馅饼数。
3、起始位置是5,所以最后要输出的是dp[0],[5]
代码
#include <iostream>
#include <cstring>
using namespace std;
const int ROW = 100000;
const int COL = 11;
int dp[ROW][COL];
int main() {
int n;
scanf("%d", &n);
while(n) {
memset(dp, 0, sizeof(dp));
for(int i=0; i<n; i++) {
int x, T;
scanf("%d %d", &x, &T);
dp[T][x]++;
}
for(int i=ROW-2; i>=0; i--) {
dp[i][0] += max(dp[i+1][0], dp[i+1][1]);
dp[i][10] += max(dp[i+1][9], dp[i+1][10]);
for(int j=1; j<10; j++) {
int tmpMax = max(dp[i+1][j-1], dp[i+1][j]);
tmpMax = max(tmpMax, dp[i+1][j+1]);
dp[i][j] += tmpMax;
}
}
printf("%d\n", dp[0][5]);
cin>>n;
}
return 0;
}