zoukankan      html  css  js  c++  java
  • hdu1087最长递增子序列

    原题地址

    简单dp题,LIS。不同之处是这里要求得的不是最长的子序列,而是权重和最长的子序列。其实大同小异。

    状态数组就是到达每个位置的最大权重。

    LIS问题常用解法就是两个:

    • 人人为我
    • 我为人人

    本题我用了我为人人的思路 。就是确定子序列起点,把其后面每一个大于它的值的位置的状态数组更新。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1005],w[1005];
    int main()
    {
        int n;
        while(cin>>n,n)
        {
            for(int i=0;i<n;i++)
            {
                cin>>a[i];
                w[i]=a[i];
            }
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                {
                    if(a[i]<a[j])
                        w[j]=max(w[j],w[i]+a[j]);
                }
            }
            cout<<*max_element(w,w+n)<<endl;
        }
    }
    


  • 相关阅读:
    封装
    面向对象的思想
    Arrays工具类
    二分查找
    选择排序
    冒泡排序
    对象数组
    二维数组
    一维数组
    循环语句注意事项
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082057.html
Copyright © 2011-2022 走看看