Super Jumping! Jumping! Jumping! HDU-1087最長上昇サブシーケンス(基礎dp特集)
8672 ワード
長さnのシーケンスが与えられ、その中に必ず1つの要素と最大の厳密な上昇サブシーケンスが存在し、このシーケンスの要素和を求める.Inputは複数組の入力データを含み、各組のデータは1行を占め、各行は整数n、次いでn個の数a_1, a_2, …, a_n(a_iは32ビット符号整数範囲)、n=0は入力終了(0<=n<=1000)を示す.Outputの数は、サブシーケンスの最大要素と厳密に上昇します.Sample Input 3 1 3 3 2 4 1 3 4 4 3 3 3 3 2 1 15 1 88 49 78 57 48 7 3 4 4 4 8 9 7 2 0 Sample Output 4 10 3 136バックプレート
if(a[j]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maxn 1005
int main()
{
int n;
int a[maxn];
int dp[maxn];
while(~scanf("%d",&n)!=EOF){
if(n==0) break;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i]=a[i];
}
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+a[i]);
}
}
int ans=0;
for(int i=1;i<=n;i++) ans=max(ans,dp[i]);
cout<<ans<<endl;
}
return 0;
}