最大子段和
来源:互联网 发布:淘宝电子发票在哪里app 编辑:程序博客网 时间:2024/06/05 04:54
题目描述:
给定n个整数(可能包含负数)组成的序列,求该序列子段和的最大值。
题目类型:动态规划
分别使用一层、两层、三层for循环实现。
代码如下:
#include<stdio.h>int a[100]={0};void show(int begin,int end,int sum){//输出最大子段以及sum值 for(int i=begin;i<=end;i++) { printf("%d ",a[i]); } printf("\n"); printf("%d\n",sum);}void MaxSum1(int n,int *a){//三层for循环 int sum=0; int i,j,k,begin,end; for(i=0;i<n;i++) { for(j=i;j<n;j++) { int count=0; for(k=i;k<=j;k++) count+=a[k]; if(count>=sum) { sum=count; begin=i; end=j; } } } show(begin,end,sum);}void MaxSum2(int n,int *a){//两层for循环 int i,j,begin,end; int sum=0; for(i=0;i<n;i++) { int count=0; for(j=i;j<n;j++) { count+=a[j]; if(count>=sum) { sum=count; begin=i; end=j; } } } show(begin,end,sum);}void MaxSum3(int n,int *a){//一层for循环 int i,begin,end; int sum=0,count=0; begin=0; for(i=0;i<n;i++) { count+=a[i]; if(count<0) { count=0; begin=i+1; } if(count>sum) { sum=count; end=i; } } show(begin,end,sum);}int main(){ int i,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("3层for循环:\n"); MaxSum1(n,a); printf("2层for循环:\n"); MaxSum2(n,a); printf("1层for循环:\n"); MaxSum3(n,a); return 0;}
0 0
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- “最大子段和”
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 2017我们一起前行!
- Java虚拟机11:运行期优化
- Leetcode 35. Search Insert Position
- JSP笔记
- sublimeText前端开发环境配置
- 最大子段和
- Java虚拟机12:Java内存模型
- C# 获取IIS站点及虚拟目录信息
- SSH框架之Struts的Action的开发、通配符、路径匹配原则(了解即可)
- Java虚拟机13:互斥同步、锁优化及synchronized和volatile
- 【数据库SQL】去掉会员id和卡号中的字母
- 分析内存泄露的一般步骤
- 二叉树的三种遍历方式
- Altium Designer 16 原理图中移动网络标号(Net Label)线也会跟着移动的解决方法