动态规划?
来源:互联网 发布:工程类 网络类 编辑:程序博客网 时间:2024/05/22 08:22
Think:
遍历时 累加为负数的时候就归零, 因为为负数时肯定不可能是最大值;
然后题目的周期 是 5 所以 进行 i + 5运算。 每次遍历结束后进行比较,最后输出MAX最大值。
Problem Description
动态规划作为《运筹学》的一个分支,被广泛的用于解决较为复杂的经济管理问题,以达到的最优抉择,获得最大经济收益为目的。也因其多变性,非常的频繁的出现在信息学竞赛的赛场上。
动态规划的核心思想为不断将问题分解为子问题,一直到可以较容易的得到最优答案,再去决定其父问题的决策,因为很大程度的避免了重复子问题的抉择,故可以节约大量时间。
现在问题来了,有一个一维数组,存储了n个正整数,下标依次为0,1,2,….,n-1。
现在要从中选取一部分数,你要给出一个选择方案使得你的方案满足下列要求:
这部分元素的下标应满足st,st+5, st+5*2 , st+5*3, … , st+5*x (0 <= st < n ,st <= st+5*x < n)。在满足第一条要求的方案中,应选取其累加和最大的一种的方案。
Input
多组输入。
对于每组输入:
第一行输入一个n(1 <= n <= 100000)。
接下来的一行有n个整数y(-100000 <= y <= 100000)。
Output
对于每组数据,输出一个整数代表你的方案的累加和。
Example Input
10
1 2 3 4 5 6 7 8 9 10
3
1 -10 2
3
-1 -2 -3
Example Output
15
2
-1
#include<bits/stdc++.h>using namespace std;int add(int m, int k, int a[]);int main() { int T; int i; int a[100050]; while(cin >> T) { memset(a, 0, sizeof(a)); for (i = 0;i <= T - 1;i ++) { cin >> a[i]; } long long int sum = add(0, T , a); for (i = 0;i <= 5 - 1;i ++) { long long int sum1 = add(i, T, a); if (sum1 > sum) sum = sum1; } cout << sum << endl; } return 0; } int add(int m, int k, int a[]) { int i; long long int sum = 0; long long int temp = -10000000; for (i = m;i <= k - 1;i = i + 5) { sum = sum + a[i]; if (temp < sum) temp = sum; if (sum < 0) sum = 0; } return temp; }
0 0
- 动态规划!!!动态规划!!!
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- sqlite浅析3--sqlite源码分析--SQLITE指令代码源码分析-SQLITE虚拟机浅析
- springmvc请求参数绑定
- 安装软件时窗口在屏幕左边,且移不动的解决方法
- 用java编写动态数组
- linux : unbtun14.04 重装后系统配置
- 动态规划?
- JUnit 实战第二版 中文目录
- android.view.InflateException: Binary XML file line
- Java(题)
- 《编程之法》:跳台阶
- 用java编写链表
- opencv之视频读取与文件存储
- Linux安装apache源码包报错:mod_deflate has been requested but can not be built due to prerequisite failures
- 2017.3.18 糖果 思考记录