zoukankan      html  css  js  c++  java
  • hdu 1087最长上升子序列和问题

    看来大佬的dp思路,在这里就简单的总结下吧。

    拿到一个问题,先得考虑是否适用dp算法。

    1,找到最优解的结构,看其子问题是否也满足最优化(子问题最优化问题)

    2,  看时候有子问题重叠

    确定一个问题可以用dp来解决以后开始分析

    1,用递归的定义来划分解的结构。

    2,选择合适的数据结构来存放子问题的最优解。

    3,按怎样的顺序去存放子问题。

       dp[i]表示的是以i为结尾的最长上升和的长度,dp[i]的递归定义 =max(dp[j]+a[i]) //a[i] 为数组里面的值 j的范围为1~i a[j]<a[i],这里只有一个维 数据结构选用一位顺序数组就可以了。代码如下:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define inf 1<<29
    using namespace std;
    int main()
    {
        cin.sync_with_stdio(false);
        int n;
        int a[1001];
        while(cin>>n)
        {
            if(n==0) break;
            for(int i=1;i<=n;i++) cin>>a[i];
            int dp[1001];
            memset(dp,0,sizeof(dp));
            //dp[1]=a[1];
            int maxn=-inf;
            for(int i=1;i<=n;i++)
            {
                int sum=0;
                for(int j=1;j<i;j++)
                {
                    if(a[j]<a[i]&&sum<dp[j]) sum=dp[j];
                }
                dp[i]=sum+a[i];
                if(maxn<dp[i])  maxn=dp[i];
            }
            cout<<maxn<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    wmq的A×B Problem
    MATLAB 求系统的单位冲击响应及单位阶跃响应
    关于共享率过低的一些事
    Vue组件之间的通信
    浏览器支持ES6的import和export
    Vue axios拦截问题
    开屏倒计时
    git常用操作
    原型
    this指向问题
  • 原文地址:https://www.cnblogs.com/z1141000271/p/6087941.html
Copyright © 2011-2022 走看看