0
点赞
收藏
分享

微信扫一扫

Super Jumping(动态规划 最长上升子序列)

kmoon_b426 2022-03-30 阅读 66
c++

参考链接:

Super Jumping! Jumping! Jumping! (上升子序列的最大和)_m悟空的博客-CSDN博客

收获:

1.用两层循环寻找最长增长子序列

2.每次找确定元素 前的最大和 维护最大值

代码:


#include<iostream>
#include<cstring>
using namespace std;
int a[1010],dp[1010];
int main()
{
    int n;
    while(cin>>n&&n)
    {
        int Ma=-1;   //最大字段和
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
            cin>>a[i];
        a[0]=0;  //最前面的数初始化为0
        for(int i=1;i<=n;i++)
        {
            int ma=-1;
            for(int j=0;j<i;j++)  //在[0,i)中找到一个最大的和num[j]<num[i]
            {
                if(a[j]<a[i])
                    ma=max(ma,dp[j]);
            }
            //每次找确定元素 前的最大和 维护最大值
            dp[i]=ma+a[i];
            Ma=max(dp[i],Ma);
        }
        cout<<Ma<<endl;
    }
    return 0;
}

题目:

 

举报

相关推荐

0 条评论