标签:免费 技术 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