动态规划求最大子序列之和以及序列号
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划求最大子序列之和以及序列号相关的知识,希望对你有一定的参考价值。
动态规划
动态规划求最大子序列之和以及序列号
题目描述
给定一个数组,求此数组的子序列之和的最大值以及子序列的起始序号,末端序号
例如:数组:nums[9] = -2,1,-3,4,-1,2,1,-5,4
解释:最大值是:6,子序列号:3,6
代码描述
方法一:保留过程值
#include <stdio.h>
#include <stdlib.h>
int main()
int dp[9][9] =0;//从第I位到第j位的最大连续子序列和
int nums[9] = -2,1,-3,4,-1,2,1,-5,4;
int i ,j,max = nums[0];
dp[0][0]=nums[0];
for(i=0;i<9;i++)
for(j=i;j<9;j++)
if(j>=1)
dp[i][j] = dp[i][j-1] + nums[j];
max = max > dp[i][j]?max:dp[i][j];
printf("%d=>%d is max=%d\\n",i,j,dp[i][j]);
for(i=0;i<9;i++)
for(j=0;j<9;j++)
printf("%d ",dp[i][j]);
printf("\\n");
printf("最大值是:%d",max);
return 0;
代码效果
方法二:不保留过程值
#include<stdio.h>
int main()
int nums[5] = 5,4,-1,7,8;
int numsSize = 5;
int size[2] = 0;
int maxnum = nums[0], i, a = 0;
for(i = 0; i<numsSize; i++)
// a = (a + nums[i])>nums[i]?(a + nums[i]):nums[i];
if((a + nums[i])>nums[i])
a = (a + nums[i]);
else
a = nums[i];
size[0] = i;
if(a>maxnum)
maxnum = a;
size[1] = i;
printf("%d\\n", maxnum);
printf("%d,%d", size[0], size[1]);
return 0;
以上是关于动态规划求最大子序列之和以及序列号的主要内容,如果未能解决你的问题,请参考以下文章