您的位置:首页 > 其它

POJ 2385 线性DP

2017-04-17 22:25 239 查看
题意:有两棵苹果树,编号为1,2,每分钟有一棵树会掉落一个苹果。一头牛在树下接苹果,每分钟只能站在一棵树下,但在树间转移的时间忽略不计。给定最大的转移次数w,问这只牛最多能接住多少苹果?

思路:水题

代码:
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
int dp[1002][32], num[1002];

int main() {
int T, M, i, j, ans;
scanf("%d%d", &T, &M);
for(i = 1; i <= T; ++i)
scanf("%d", &num[i]);
if(num[1] & 1) dp[1][0] = 1;
ans = dp[1][1] = 1;
for (int i = 2; i <= T; ++i) {
dp[i][0] = dp[i - 1][0] + num[i]%2;
for (int j = 1; j <= M; ++j) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]);
//牛跳奇数次一定在树2下 牛跳偶数次 一定在树1下
//奇数+2  和 偶数 + 1 都是奇数  吃苹果  & 1 = 1
//奇数+ 1 和  偶数 + 2 都是偶数  吃不到苹果 & 1 = 0
dp[i][j] += ((j + num[i]) & 1);
ans = max(dp[i][j], ans);
}
}
printf("%d\n", ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: