最大子段和
来源:互联网 发布:魔兽世界7.0数据库 编辑:程序博客网 时间:2024/05/16 12:00
/* 再给顶的n个数的数组中选出连续的若干个数,使得他们的和是最大的,即最大连续自序列和. 列如. 序列. 1 -2 3 -1 6 -5 9 结果 当取子序列 3,-1,6,-5,9 结果12 我的思路. 1.最大连续子序列的开头是在1...n之中.的最大连续和 2.求出以i,开头的最大连续和,此时开头已经确定了,那麽通过枚举结尾j[i,j]之间记录最大连续的i->j的和max[i] 3.在所有以i开头的连续最大和中求出最大的一个即可. */#include <stdio.h>#define maxn 100int get_max(int a,int b){ return a>b?a:b;}int main(){ int max[maxn]={0},A[maxn]; int i,n; for(scanf("%d",&n),i=1;i<=n;i++) scanf("%d",&A[i]); for(i=1;i<=n;i++){ int sum=0,j; for(j=i;j<=n;j++){ sum+=A[j]; max[i]=get_max(max[i],sum); } } for(i=1;i<=n;i++) n=get_max(n,max[i]); printf("%d \n",n); return 0;}
/* * *问题:给出n个数子,求出其中连续的最大和从i,j 的和是 a[i]+a[i+1]+.......a[j] * *这是经典的动态规划题目 *问题:是求n个数字的其中的连续n个最大数的和. *最大连续的数字和的结尾一定是1...n中的一个. *因此我们只需要求出这样的d[i](以a[i]为结尾的最大连续和),d[i]的的出现可能是 *1.d[i-1]+a[i],(将a[i],放到i-1为结尾的位置,的后面). *2.以a[i]开头,且以a[i],结尾 *我们要在上面两者求出一个较大的.做为以a[i]为结尾最大的连续子序列之和(在这里a[],序列的子序列包含本身) *将以任意元素作为结尾的连续子序列何求出来后,在其中选出一个最大的. *序列的开头为什么不用判断呢,这是因为隐含到了d[i]中(即在得到d[i]是已经作出了选择即为上述的1,2过程) */#include <stdio.h>#define maxn 1001int main(){ int A[maxn]={0}; int d[maxn]={0},i,n,max=-0xffffff; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&A[i]); d[i]=A[i]; if(i>1) d[i]=d[i]>d[i-1]+d[i]?d[i]:d[i-1]+d[i]; if(max<d[i]) max=d[i]; } printf("%d\n",max); return 0;}
0 0
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- “最大子段和”
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 最大子段和
- 鸟哥的私房菜:Bash shell(四)-Bash shell的使用环境
- 黑马程序员-动态代理
- iOS推送通知(Push Notification)的Erlang实现
- ACM基本输入输出
- 小白书39页sprintf与格式控制
- 最大子段和
- SQLSERVER存储过程分页
- Nyoj 302 星际旅行[矩阵乘法求两点k步方案数]
- nodejs调试问题(一)
- SSE _align_malloc 数据地址对齐
- 更新Xcode6.0.1之后,编译出现Use of undeclared identifier 'GL_BGRA_EXT'问题及解决方案
- POJ 2411 Mondriaan's Dream 状态压缩DP
- C++ STL Set 快速入门
- HDU 1025 Constructing Roads In JGShining's Kingdom