hdu 1087 Super Jumping! Jumping! Jumping!

题意:给n个数,输出最大上升子序列的和

分析:类似最长上升子序列,dp[i]表示选i的时候最大的上升子序列和

那么  dp[i]=a[i];

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

    if(a[j]<a[i]&&dp[j]+a[i]>dp[i])

      dp[i]=dp[j]+a[i];

复杂度O(n^2)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e3+5;
 4 
 5 int a[maxn],dp[maxn];
 6 
 7 int main(){
 8     int n;
 9     while(cin>>n&&n){
10         for(int i=0;i<n;i++)cin>>a[i];
11         int res=INT_MIN;
12         
13         for(int i=0;i<n;i++){
14             dp[i]=a[i];
15             for(int j=0;j<i;j++)
16                 if(a[j]<a[i]&&dp[j]+a[i]>dp[i])
17                     dp[i]=dp[j]+a[i];
18             res=max(res,dp[i]);
19         }
20         cout<<res<<endl;
21     }
22     return 0;
23 }
View Code
原文地址:https://www.cnblogs.com/jihe/p/6554358.html