题意
传送门 POJ 2385
每一个时间点,农夫可能在编号为 1 或 2 苹果树的位置。考虑到对于第 i 次移动位置,所在树的编号是可以确定的,那么在第 i 次移动后各个时间点获取苹果的数量也可以确定。答案为所有移动次数到达最末时间点获得苹果数量的最大值。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define abs(x) ((x) < 0 ? -(x) : (x))
#define INF 0x3f3f3f3f
#define delta 0.85
#define eps 1e-3
#define PI 3.14159265358979323846
#define MAX_T 1010
#define MAX_W 35
using namespace std;
int T, W;
int chs[MAX_T];
int dp[2][MAX_T];
int main(){
while(~scanf("%d%d", &T, &W)){
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= T; i++){
scanf("%d", chs + i);
--chs[i];
}
int res = 0;
int *crt = dp[0], *nxt = dp[1];
for(int i = 0; i <= W; i++){
for(int j = max(i, 1); j <= T; j++){
nxt[j] = max(nxt[j - 1], crt[j - 1]) + (((i & 1) == chs[j]) ? 1 : 0);
}
res = max(res, nxt[T]);
swap(crt, nxt);
}
printf("%d\n", res);
}
return 0;
}

97

被折叠的 条评论
为什么被折叠?



