求解PTA最大子列和问题的三种方法(包括输出首尾项)
来源:互联网 发布:qq邮箱for mac 编辑:程序博客网 时间:2024/05/19 20:42
01-复杂度1 最大子列和问题(20 分)
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:与样例等价,测试基本正确性;
- 数据2:102个随机整数;
- 数据3:103个随机整数;
- 数据4:104个随机整数;
- 数据5:105个随机整数;
输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6-2 11 -4 13 -5 -2
输出样例:
20
#include<iostream>using namespace std;int start, finish;int max_sub(int *a, int size)//O(n^2)优化穷举法求最大子序列和的函数 {int i, j, v;int max = a[0];for (i = 0; i<size; i++){v = 0;for (j = i; j<size; j++){v = v + a[j]; //Sum(i, j+1) = Sum(i, j) + A[j+1] if (v>max) max = v;}}return max;}int max_dg(int *a,int size)//O(n)动态规划法求最大子序列和的函数 {int i, sum = 0, maxsum = 0, flag = 0, temp_sum = 0;for (i = 0; i<size; i++) //在该循环内判断序列中是否存在正数 {if (a[i]>0)flag = 1; //用flag标记,若存在正数则为1 }if (flag == 0) //若不存在正数,则输出0和首尾元素{ maxsum = 0; start = 0; finish = size - 1;return 0;}for (i = 0; i<size; i++){temp_sum += a[i];if (temp_sum > maxsum){maxsum = temp_sum; finish = i;}else if (temp_sum<0)temp_sum = 0;}/*由于子序列最大和为maxsum,所以只需将maxsum与前面各项相减到零即可确定第一个元素下标start。由于题目中规定若有不只一组最大子序列和时输出start和finish较小的那一组,所以i要减到0。以防把前面相加等于零的子列忽略。若这里规定的是输出finish-start最小的一组,则在判断sum==0时退出循环即可*/for (i = finish; i >= 0; i--){sum -= a[i];if (sum == 0)start = i;}return maxsum;}int Max_3(int a, int b, int c) //O(NlogN)分治法求最大子序列和的函数{if (a < b)a = b;if (a < c)return c;elsereturn a;}int MaxSubSeqSum(const int *A, int left, int right){int MaxLeftSum, MaxRightSum, MaxSum;int MaxLeftBorderSum, MaxRightBorderSum;int LeftBorderSum, RightBorderSum;int center;int i;if (left == right){if (A[left] > 0)return A[left];elsereturn 0;}center = (left + right) / 2;MaxLeftSum = MaxSubSeqSum(A, left, center);MaxRightSum = MaxSubSeqSum(A, center + 1, right);MaxLeftBorderSum = 0;LeftBorderSum = 0;for (i = center; i >= left; i--){LeftBorderSum += A[i];if (LeftBorderSum > MaxLeftBorderSum)MaxLeftBorderSum = LeftBorderSum;}MaxRightBorderSum = 0;RightBorderSum = 0;for (i = center + 1; i <= right; i++){RightBorderSum += A[i];if (RightBorderSum > MaxRightBorderSum)MaxRightBorderSum = RightBorderSum;}MaxSum = Max_3(MaxLeftSum, MaxRightSum, MaxLeftBorderSum + MaxRightBorderSum);return MaxSum;}int main(){int i, j;int a[100];cout << "please input a number" << endl;cin >> j;cout << "please input the numbers" << endl;for (i = 0; i < j; i++) //输入进行计算的序列cin >> a[i];cout << "the row is :";for (i = 0; i < j; i++) //输出获得的序列cout <<" " <<a[i];cout << endl;cout << "The sum of biggest row is:"<<max_dg(a,j) << endl; //输出最大子序列和cout << "输出序列的首、尾元素:"<<a[start]<<","<<a[finish]<<endl;/*for (i = 0; i < j; i++) //生成随机数,并存放在数组中{a[i] = rand();cout << a[i];}cout << endl;*/return 0;}阅读全文0 0
- 求解PTA最大子列和问题的三种方法(包括输出首尾项)
- 最大子列和问题(同时输出有最大和的子列的首尾元素)【数据结构测试1.2】
- PTA 最大子列和问题
- PTA-最大子列和问题
- 求解最大子列和问题的四种算法
- 求解最大子数组问题的三种方法
- 最大子列问题首尾顺序
- 20160919求解最大子列和的问题
- PTA 5-1 最大子列和问题 (20分)
- 【算法学习笔记】19.算法设计初步 最大子列和问题的三种方法
- PTA 数据结构题目(1):最大子列和问题(分而治之、在线处理算法)
- 用三种方法实现最大子列和的求解(Python实现)
- 求解最大子列和问题——MaxSubSum
- 最大子序列和问题的求解
- 最大子数列和的问题求解
- 最大子序列和问题的求解
- 最大子序列和问题的求解
- PTA数据结构与算法题目集(中文)5-1 最大子列和问题 (20分)
- CentOS Redis 集群
- [LeetCode] 557.Reverse Words in a String III
- 2017年度北大软微学院创新创业论坛|悬镜分享DevSecOps的思考与实践
- darwin之task线程分类
- 浅析Android热修复sophix
- 求解PTA最大子列和问题的三种方法(包括输出首尾项)
- 学习java基础语法
- 学习日记12/7——加入Capstone第3天
- 矩阵乘法
- capstone训练营2017-12-7
- Matlab读取视频并处理成帧保存
- QT控件大全 十一 QLock
- 解决Eclipse每次修改完代码后需要先Clean代码才能生效问题
- Mybatis mapper层No enum constant org.apache.ibatis.type.JdbcType.date
原创粉丝点击热门IT博客热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星s8越用越卡怎么办 分销等级不够怎么办 淘宝客户拒收怎么办 淘宝直播被禁播怎么办 被骗的钱追不回怎么办 csgo饰品被骗怎么办 steam中国怎么办 steam退不了怎么办 steam被骗余额怎么办 steam被骗盗怎么办 睡觉就做梦怎么办 失眠做噩梦怎么办 生意差怎么办 微商囤货卖不出去怎么办 淘宝排名太靠后怎么办 淘宝卖家刷销量怎么办 亚马逊关键词侵权怎么办 闲鱼上被买丝袜怎么办 闲鱼上被卖丝袜怎么办 直通车开不了怎么办 修改标题被降权怎么办 淘宝品牌没有怎么办? 血压不稳定忽高忽低怎么办 电压不稳定怎么办 产品没有权重怎么办 淘宝访客不稳定怎么办 淘宝恶意点击怎么办 淘宝商家不返现怎么办 降权了怎么办 微信团购群没人买东西怎么办 淘宝不让买东西怎么办 食品流通证怎么办 食堂卫生许可证怎么办 开网店没有销量怎么办 微博下不起怎么办 淘宝销量不好怎么办 家住一楼太潮湿怎么办 墙体长毛怎么办 墙壁裂了怎么办 墙壁开裂怎么办 做美瞳线肿了怎么办程序博客网,程序员的互联网技术博客家园。csdn论坛精品 msdn技术资料都在这里