求一个正数序列,不超过某一上限最…
来源:互联网 发布:ubuntu mate 输入法 编辑:程序博客网 时间:2024/05/01 10:05
在订阅的页面中看到该算法题。解决方案有人说穷举,有人说动态规划,其实这道题目没这么复杂。因为子序列必须是连续的。(不然就是背包问题了)。所以有O(N平方)的解法,而不是O(2的N次方)
代码如下:
#include <iostream>
using namespace std;
// 本函数只打印唯一解,如果要打印所有解,就先扫描最大值,再扫描一次打印所有即可
int printMaxSeqence(int* a, int size, int limit)
{
intmax_seq_first = -1;
intmax_seq_last = -1;
intmax_seq_sum = 0;
for (int i =0; i < size; ++ i)
{
int sum =0;
for (int j =i; j >= 0; -- j)
{
sum +=a[j];
if (sum> limit)
{
break;
}
else if (sum== limit)
{
for (int k =j; k <= i; ++ k)
{
cout<< a[k]<< ",";
}
cout<< endl;
returnsum;
}
else
{
if (sum> max_seq_sum)
{
max_seq_sum= sum;