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)
如果在奇数单位时间内服用药剂,跳跃能力就能增加,如果在偶数的单位之间内服用药剂,跳跃能力就会减少
问最后的跳跃能力的最大值是多少
解题思路:用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; }
相关文章推荐
- CodeForces 416A Guess a number!
- codeforces 466B Wonder Room 数学?
- Git教程
- 字符串中的字符是否唯一(
- Tomcat中的JSTL配置与使用
- leetcode118 and 119 Pascal's Triangle
- iOS 多线程的使用(Operation)
- java.util.Comparator用法
- 优点和阵列的缺点,并且一个链表
- unity3d 学习笔记(三)
- [Reactive Programming] RxJS dynamic behavior
- Linux基本命令(1)
- C++ Boost Thread 编程指南
- 计算机组成原理前四章总结
- 信息安全系统设计基础第四周学习总结—20135227黄晓妍
- Java基础知识强化之集合框架笔记21:数据结构之 数组 和 链表
- Java数据类型和MySql数据类型对应表
- Objective-C中的一些特殊的数据类型 SEL、id、@、nil、Nil
- HDU 5443 The Water Problem 2015 ACM/ICPC Asia Regional Changchun Online
- Mac OS X上安装 Ruby运行环境