销售网站制作怎么做,手表电商网站,南京做网站哪家公司好,深圳网站建设比较动态规划解决问题是自底向上。原问题的规模是n个元 素。这n个元素不好考虑#xff0c;我们先考虑n-1个元素#xff0c;这样还不好考 虑#xff0c;我们考虑n-2个元素#xff0c;这样依次递减#xff0c;最后问题规模变成一个 元素。但是我们发现#xff0c;在递减的过程中…动态规划解决问题是自底向上。原问题的规模是n个元 素。这n个元素不好考虑我们先考虑n-1个元素这样还不好考 虑我们考虑n-2个元素这样依次递减最后问题规模变成一个 元素。但是我们发现在递减的过程中间子问题的最优解包含 在原问题的最优解之中而且子问题的解还有一些是重复的。 因此使用动态规划来解决这个问题。
思想 对字段序列进行一个循环 如果之前的序列b0则加入这个新的序列之中 如果之前的序列b0,则重新设置字段的序列和为nums[i] 如果之前的序列加上nums[i],的值大于之前的最大序列和则更新最大序列和 我们要写出一个递归方程。我们设置一个数组b来存放最优解首先将b[1]a[1]a存放的是我们的n个元素。第i个元素他的状态就是将他放不放到数组b中和之前的有些像。因此递归方程就是:b[i]max{b[i-1]a[i],a[i]}
#includeiostream
using namespace std;long long MaxSum(long long *nums,int n)
{long long sum0;long long b0;//b是临时的字段和的数值 for(int i0;in;i){if(b0){bbnums[i];}else{bnums[i];}if(bsum)//更新字段和值 {sumb;}}return sum;
}
int main()
{cout请输入字段的长度;long long n;cinn;long long nums[n];cout请输入字段序列(中间用空格隔开);for(int i0;in;i){cinnums[i];} cout最大字段和为MaxSum(nums,n);return 0;
}