标签:免费 技术 ott input space rac namespace div images
如今给这条小径如图标上坐标:
每组数据的第一行为以正整数n(0<n<100000),表示有n个馅饼掉在这条小径上。在结下来的n行中,每行有两个整数x,T(0<T<100000),表示在第T秒有一个馅饼掉在x点上。同一秒钟在同一点上可能掉下多个馅饼。n=0时输入结束。
输出一个整数m,表示gameboy最多可能接到m个馅饼。
提示:本题的输入数据量比較大,建议用scanf读入,用cin可能会超时。
6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
题意:每一次仅仅能移动一步,那么我们能够考虑到假设考虑在该位置第i秒的最优解,是要考虑第i+1秒该位置左右和该位置三者之中最大的。之后就是动态规划。
dp[i][j] = max(dp[i+1][j], dp[i+1][j], dp[i+1][j-1]
代码:
#include <cstdio> #include <cstring> #include <algorithm> #define M 100005 using namespace std; int dp[M][11]; /*int max(int a, int b){ if(a < b) return b; return a; }*/ int main(){ int n; while(scanf("%d", &n), n){ int maxt = 0, i, j, t, x; memset(dp, 0, sizeof(dp)); for(i = 0; i < n; i ++){ scanf("%d%d", &x, &t); dp[t][x]++; maxt = max(maxt, t); } for(i = maxt-1; i >= 0; i --){ int temp; for(j = 0; j < 11; j ++){ temp = 0; if(j == 0) temp = max(dp[i+1][j], dp[i+1][j+1]); else if(j == 10){ temp = max(dp[i+1][j], dp[i+1][j-1]); } else temp = max(max(dp[i+1][j], dp[i+1][j+1]), dp[i+1][j-1]); dp[i][j] += temp; } } printf("%d\n", dp[0][5]); } return 0; }
标签:免费 技术 ott input space rac namespace div images
原文地址:http://www.cnblogs.com/cxchanpin/p/7047893.html