顺序表应用8:最大子段和之动态规划法
来源:互联网 发布:淘宝宝贝视频拍摄技巧 编辑:程序博客网 时间:2024/06/06 03:25
顺序表应用8:最大子段和之动态规划法
Time Limit: 5MS Memory Limit: 500KB
Submit Statistic
Problem Description
给定n(1<=n<=100000)个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n。 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
注意:本题目要求用动态规划法求解,只需要输出最大子段和的值。
Input
第一行输入整数n(1<=n<=100000),表示整数序列中的数据元素个数;
第二行依次输入n个整数,对应顺序表中存放的每个数据元素值。
Output
输出所求的最大子段和
Example Input
6-2 11 -4 13 -5 -2
Example Output
20
动态规划法求最大子段和,也就是如果当前子段和是一个小于0的数的话,再加上一个数,这肯定不是一个最优解,所以当前子段的和是一个正数时才加上下一个数据。
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100010 typedef struct { int *elem; int length; int listsize; }Sqlist; void initList(Sqlist &L){ L.elem=new int[MAXSIZE]; L.length=0; L.listsize=MAXSIZE; } void Creatlist(Sqlist &L,int n) { for(int i=0;i<n;i++) { scanf("%d",&L.elem[i]); } L.length=n; } void getMaxSum(Sqlist &L) { int max=0; int maxsum=0; for(int i=0;i<L.length;i++) { maxsum+=L.elem[i]; if(maxsum<0) { maxsum=0; } if(maxsum>max) { max=maxsum; } } printf("%d\n",max); } int main() { int n; scanf("%d",&n); Sqlist L; initList(L); Creatlist(L,n); getMaxSum(L); return 0; }
阅读全文
0 0
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 3665顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- SDUTACM 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 数据结构顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- django2 orm常用操作
- 决策树算法详解(3)
- eclipse,工程/文件目录,相对路径
- HDU 1312Red and Black(dfs)
- 转载知乎关于python编码的讲解
- 顺序表应用8:最大子段和之动态规划法
- 大数模板
- 深入理解Java并发之synchronized实现原理
- DOM对象与jquery对象之间的关系对比
- hdu1166之线段树
- 解决Graphics2D drawImage图片失真的问题
- action相关
- 有序01字符串
- 自定义view雪花