17089 最大m子段和
17089 最大m子段和
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC;VC
Description
- “最大m子段和”问题:给定由n个整数(可能为负)组成的序列a1、a2、a3、...、an,以及一个正整数m,
- 要求确定序列的m个不相交子段,使这m个子段的总和最大!
- m是子段的个数。当m个子段的每个子段和都是负值时,定义m子段和为0。
输入格式
- 第一行:n和m; (n,m<10000)
- 第二行:n个元素序列,中间都是空格相连。
- 比如:
- 6 3
- 2 3 -7 6 4 -5
输出格式
- 输出最大m子段和。
- 比如:
- 15
- 这15可由这三个段之和来的:(2 3) -7 (6) (4) -5
输入样例
- 6 3
- 2 3 -7 6 4 -5
输出样例
- 15
提示
- 这个题,书上有完整的递归公式分析和源代码P58-59,按照书上的思想就可以完美通过了。
- 注意一下:书上P58的代码完全准确,但P59的优化代码,引入了c[]数组,但未对c数组全部初始化,
- 只初始化了c[1],后面的循环中可能会用到未初始化的某个c元素,从而导致结果不正确。因此用
- 下面代码替换了书上的c[1]=0;这条语句。
- for(int i=0; i<=n; i++) c[i]=0;
- 我的代码实现:
- #include<stdio.h>
- #define N 10005
- int MaxSum(int m,int n,int *a){
- if(n<m||m<)return ;
- int *b=new int[n+];
- int *c=new int[n+];
- b[]=;
- for(int i=;i<=n;i++){
- c[i]=;
- }
- for(int i=;i<=m;i++){
- b[i]=b[i-]+a[i];
- c[i-]=b[i];
- int max=b[i];
- for(int j=i+;j<=i+n-m;j++){
- b[j]=b[j-]>c[j-]?b[j-]+a[j]:c[j-]+a[j];
- c[j-]=max;
- if(max<b[j])max=b[j];
- }
- c[i+n-m]=max;
- }
- int sum=;
- for(int j=m;j<=n;j++)
- if(sum<b[j])sum=b[j];
- return sum;
- }
- int main(){
- int x[N];
- int n,m;
- scanf("%d %d",&n,&m);
- for(int i=;i<=n;i++){
- scanf("%d",&x[i]);
- }
- printf("%d",MaxSum(m,n,x));
- return ;
- }
17089 最大m子段和的更多相关文章
- 最大子段和(c++)
// 最大子段和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namesp ...
- 51Node 1065----最小正子段和
51Node 1065----最小正子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这 ...
- 最大M子段和 V2
51nod1053 这题还是我们熟悉的M子段和,只不过N,M<=50000. 这题似乎是一个堆+链表的题目啊 开始考虑把所有正数负数锁在一起. 比如: 1 2 3 -1 –2 -3 666 缩成 ...
- 51nod 循环数组最大子段和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所 ...
- [日常训练]最大M子段和
Description 在长度为的序列中选出段互不相交的子段,求最大字段和. Input 第一行两个整数. 第二行个整数. Output 一行一个整数表示最大值. Sample Input 5 2 1 ...
- 51nod1049(计算最大子段和)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 题意:又是仲文题诶- 思路:暴力会超时,又好像没什么专门 ...
- XCOJ 1103 (LCA+树链最大子段和)
题目链接: http://xcacm.hfut.edu.cn/problem.php?id=1103 题目大意:链更新.链查询,求树链的最大子段和.(子段可以为空) 解题思路: 将所有Query离线存 ...
- 洛谷P1121 环状最大两段子段和
题目描述 给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大. 输入输出格式 输入格式: 输入文件maxsum2.in的第一行是一个正整数N,表示了序列 ...
- [51NOD1959]循环数组最大子段和(dp,思路)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 这道题的最大子段和有两种可能,一种是常规的子段和,另一种 ...
随机推荐
- ssh相关原理学习与常见错误总结
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- [转]Oracle High Water Level高水位分析
PLSQL_性能优化系列14_Oracle High Water Level高水位分析 http://www.cnblogs.com/eastsea/p/4005814.html 一.摘要 PLSQL ...
- Eclipse的几个常用快捷键
键盘操作 功能 Alt + / 语句或变量名自动补全 Ctrl + Shift + F 语句格式化 Ctrl + / 单行注释(或取消单行注释) Ctrl + Shift + / 多行注释 ...
- sqlmap命令
-u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p "page,id") -D "& ...
- python基础教程——函数
定义函数 //abstest.py def my_abs(x): if x >= 0: return x else: return -x 在该文件的当前目录下启动python解释器,用 from ...
- Maven3 快速入门
Maven3 快速入门 Maven 是目前大型项目构建的必备知识.本章会通过介绍 Maven 的作用,Maven 的基本语法,以及搭建企业级项目架构来快速入门 Maven .前两部分是理论知识只需要了 ...
- 常用接口简析3---IList和List的解析
常用接口的解析(链接) 1.IEnumerable深入解析 2.IEnumerable.IEnumerator接口解析 3.IComparable.IComparable接口解析 学习第一步,先上菜: ...
- [smartMenu.js] 一个基于jquery的实用的右键拓展菜单栏插件
正在为电子书阅读器添加精准易用的标记功能,其中一个方案是扩展阅读器界面的右键菜单栏,使得用户右键点击某个词.子句.段落的时候可以进行扩展操作. 右键菜单栏有很多基于jQuery的插件,其中灵活性比较强 ...
- phython廖雪峰
这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...
- python中字母与ascii码的相互转换
在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...