标签:
每秒可以移动1格
初始位置在5
dp[t][x] 代表 第t秒 在x位置 已经接到的馅饼数量
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 #define MAXN 100000 6 7 int n, dp[MAXN+1000][11], cake[MAXN+1000][11]; 8 9 int main(int argc, char const *argv[]) 10 { 11 // freopen("_in", "r", stdin); 12 while(scanf("%d", &n) && n!=0){ 13 14 memset(cake, 0, sizeof(cake)); 15 16 int max_t = 0; 17 for(int i = 1, _t, _x; i <= n; ++i){ 18 scanf("%d%d", &_x, &_t); 19 ++ cake[_t][_x]; 20 max_t = std::max(max_t, _t); 21 } 22 23 memset(dp, -1000000, sizeof(dp)); 24 dp[0][5] = 0; 25 26 for(int t = 1; t <= max_t; ++t) 27 for(int x = 0; x <= 10; ++x) 28 if(x == 0){ 29 dp[t][x] = std::max(dp[t-1][x], dp[t-1][x+1]) + cake[t][x]; 30 } 31 else if(x == 10){ 32 dp[t][x] = std::max(dp[t-1][x-1], dp[t-1][x]) + cake[t][x]; 33 } 34 else{ 35 dp[t][x] = std::max(dp[t-1][x-1], std::max(dp[t-1][x], dp[t-1][x+1])) + cake[t][x]; 36 } 37 printf("%d\n", *std::max_element( dp[max_t], dp[max_t]+11 ) ); 38 39 } 40 return 0; 41 }
标签:
原文地址:http://www.cnblogs.com/takeoffyoung/p/4326824.html