您的位置:首页 > 其它

HDU - 2713 Jumping Cows(DP水题)

2015-10-02 16:06 357 查看
题目大意:有N种药剂,1单位的时间只能服用一种药剂,且要按顺序服用,当然,也可以选择跳过该药剂的服用

如果在奇数单位时间内服用药剂,跳跃能力就能增加,如果在偶数的单位之间内服用药剂,跳跃能力就会减少

问最后的跳跃能力的最大值是多少

解题思路:用dp[i][0]表示前i个药剂,在偶数单位时间内全部服完的最大跳跃能力

dp[i][1]表示前i个药剂,在奇数单位时间内全部服完的最大跳跃能力

则dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - val)

dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + val)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 150010;

int dp
[2];
int n;

void solve() {
dp[0][0] = dp[0][1] = 0;

int val;
for (int i = 1; i <= n; i++) {
scanf("%d", &val);
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - val);
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + val);
}
printf("%d\n", max(dp
[0], dp
[1]));
}

int main() {
while (scanf("%d", &n) != EOF) solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: