您的位置:首页 > 其它

动态规划—13最大上升子序列和

2017-04-19 22:42 183 查看
题目:给出一个序列,求出这个序列的所有子序列中和最大的那个,输出最大的和。

解题思路:利用两重循环   for(i=0;i<n;i++), for(j=0;j<i;j++)然后用b[i]数组存那个最大的和,定义一个max用max与b[i]比较大小如果b[i]>max,则max=b[j],然后用一重循环在与定义的t=0比较大小求出最大的那个即是答案。

细节处理:再定义一个b数组存最大和。

代码:#include<bits/stdc++.h>

using namespace std;

int main()

{

    int a[1007],b[1007];

    int n,i,j,max;

    while(cin>>n)

    {

        for(i=0;i<n;i++)

        cin>>a[i];

        b[0]=a[0];

        for(i=0;i<n;i++)

        {

            max=0;

            for(j=0;j<i;j++)

            {

                if(a[i]>a[j])

            {

                if(max<b[j])

                max=b[j];

                }

            }

           b[i]=a[i]+max;

        }

        int t=0;

        for(i=0;i<n;i++)

        {

        if(t<b[i])

        t=b[i];

        }

      cout<<t<<endl;

    }

    return 0;

}

感想:动态规划的问题很抽象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: