zoukankan      html  css  js  c++  java
  • D

    题目大意: 给出一个序列,然后求这个序列的最大上升子序列的和。

    题解:定义状态dp[i]表示前i个数的最大和,dp[i]的最小值应该是arr[i]了,因为i前边可能有负数,对于负数,虽然可以构成上升子序列,但是没有必要选。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    const long long  INF=1e18+7;
    const int N=1e3+7;
    long long  arr[N];
    long long dp[N];
    int main(){
        int n;
        while(cin>>n,n){ 
            for(int i=1;i<=n;i++){
                cin>>arr[i];
                dp[i]=arr[i];
            } 
            long long  ans=arr[1];
            for(int i=1;i<=n;i++){
                for(int j=1;j<i;j++){
                    if(arr[i]>arr[j]){
                        dp[i]=max(dp[i],dp[j]+arr[i]);
                    }
                }
                ans=max(ans,dp[i]);
            }
            cout<<ans<<endl;
        }
        return 0;
    } 
  • 相关阅读:
    表单控件和属性
    html5语义化标签
    移动布局
    webpack
    OMobile
    Npm的下载 安装 管理工具
    模块化开发
    百度地图
    离线缓存
    canvas和svg
  • 原文地址:https://www.cnblogs.com/Accepting/p/12960270.html
Copyright © 2011-2022 走看看