3665 顺序表应用8:最大子段和之动态规划法
来源:互联网 发布:商户销售数据采集 编辑:程序博客网 时间:2024/06/05 23:56
顺序表应用8:最大子段和之动态规划法
Time Limit: 5MS Memory Limit: 500KB
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
#include <stdio.h>typedef struct node{ int len; int *elem;}sl;void creat(sl &l, int n){ l.len = n; l.elem = new int[50020];}void scan(sl &l){ for(int i=0;i<l.len;i++) { scanf("%d",&l.elem[i]); }}int maxsum(sl &l, int n){ sl r=l; int sum = 0; for(int i = 1;i<n;i++) { if(r.elem[i-1]>0) { r.elem[i] = r.elem[i-1] + r.elem[i]; } else { r.elem[i] = l.elem[i]; } } for(int j = 0; j<n;j++) { if(r.elem[j]>sum) { sum = r.elem[j]; } } return sum;}int main(){ int n, sum; sl l; scanf("%d",&n); creat(l,n); scan(l); sum = maxsum(l,n); printf("%d\n",sum); return 0;}
阅读全文
0 0
- 3665顺序表应用8:最大子段和之动态规划法
- 3665-顺序表应用8:最大子段和之动态规划法
- 3665 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- SDUTACM 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 顺序表应用8:最大子段和之动态规划法
- 数据结构顺序表应用8:最大子段和之动态规划法
- mongodb Capped Collection
- 有关verilog中阻塞赋值和非阻塞赋值的问题
- Swift4.0字典的常用详解
- hdu 6106.Classes
- AzureAD 错误信息Access token validation failure
- 3665 顺序表应用8:最大子段和之动态规划法
- Centos7.2 kickstart批量装机
- Swift4.0 数组的常用详解
- Codeforces Round #440 (Div. 2) B. Maximum of Maximums of Minimums
- DOM元素的特性(Attribute)和属性(Property)
- Swift4.0结构体基础知识点
- [NOIP2008]双栈排序 【二分图 + 模拟】
- lwip之数据收发流程
- spark join shuffle 数据读取的过程