动态规划求连续元素的和最大

/***********dynamic algorithm to get the max sum of the continous elements of a integer array**/
#include<stdio.h>
#include<iostream>
using namespace std;

/**********
sum[i] = max{sum[i-1] + a[i], a[i]}
start[i] = start[i-1]; //if sum[i-1] + a[i] > a[i]
start[i] = i; //if sum[i-1] + a[i] < a[i]
***************/
int sum[100]; //the sum
int start[100]; //the start index
void max_sum(int a[], int n)
{
   sum[0] = a[0];
   start[0] = 0;
   int i;
   for (i = 1; i < n; i++)
   {
      if (sum[i-1] + a[i] > a[i])
      {
         sum[i] = sum[i-1] + a[i];
         start[i] = start[i-1];
      }
      else
      {
         sum[i] = a[i];
         start[i] = i;
      }
    }
    int maxValueIndex = 0;
    for (i = 1; i < n; i++)
    {
        if (sum[maxValueIndex] < sum[i])
            maxValueIndex = i;
    }
    cout<<"max value:"<< sum[maxValueIndex]<<endl;
    cout<<"max value interval: "<< start[maxValueIndex] <<"---"<<maxValueIndex<<endl;
}

int main(int argc, char * argv[])
{
   int a[] = {-4, 3, 56, -15, 34, 0, -14, 4};
   int n = sizeof(a)/sizeof(int);
   max_sum(a, n);
   return 1;
}


 若是求连续元素的乘积最大


  1. double func(double *a,const int n)  
  2. {  
  3.     double *maxA = new double[n];  
  4.     double *minA = new double[n];  
  5.     maxA[0] = minA[0] =a[0];  
  6.     double value = maxA[0];  
  7.     for(int i = 1 ; i < n ; ++i)  
  8.     {  
  9.         maxA[i] = max(max(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);  
  10.         minA[i] = min(min(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);  
  11.         value=max(value,maxA[i]);  
  12.     }  
  13.     return value;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值