求一个正数序列,不超过某一上限最…

来源:互联网 发布: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;
               max_seq_first = j;
                max_seq_last= i;
             }
          }
       }
    }
    for (int i =max_seq_first; i <= max_seq_last; ++ i)
    {
       cout<< a[i]<< ",";
    }
    cout<< endl;
    returnmax_seq_sum;
}

int main()
{
    int a[] ={5, 8, 1, 4, 3, 9};
    cout<< printMaxSeqence(a, 6, 11)<< endl;
    return0;
}

   
0 0
原创粉丝点击