(原创精品)最大子段和(动态规划).docVIP

  • 38
  • 0
  • 约小于1千字
  • 约 2页
  • 2017-08-14 发布于河南
  • 举报
最大子段和 给定由n个整数(包含负整数)组成的序列a1,a2,...,an,求该序列子段和的最大值。 当所有整数均为负值时定义其最大子段和为0。 依此定义,所求的最优值为: 最大子段和问题的动态规划算法由bj的定义易知, 当bj-10时bj=bj-1+aj,否则bj=aj。 由此可得计算bj的动态规划递归式bj=max{bj-1+aj,aj},1≤j≤n。 算法 int MaxSum(int n, int a) { int sum=0; b=0; for (i=1;i=n;i++) { if (b0) b+=a[i]; else b=a[i]; if (bsum) sum=b; } return sum; } 显然该算法的计算时间为O(n)程序清单: #includeiostream using namespace std; int MaxSum(int n,int a[]) { int sum=0,b=0; for(int i=1;i=n;i++) { if(b0)b+=a[i]; else b=a[i]; if(bsum)sum=b; } return sum; } int main() { int n,a[100],m,maxsum; cout请输入整数序列的元素个数n: endl; cinn; cout请输入序列中各元素

文档评论(0)

1亿VIP精品文档

相关文档