题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/E
题意:给定一个数组,然后求一个上升序列,使得该序列的和值最大。
可以说就是一个最长上升子序列的问题,只是我们把维护长度变成了维护和值而已。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 1010
using namespace std;
int N,A[maxn],dp[maxn];
int main(){
//freopen("in.txt","r",stdin);
while(cin>>N && N){
for(int i=0;i<N;i++)
scanf("%d",A+i);
int ans=0;
for(int i=0;i<N;i++){
dp[i]=A[i];
for(int j=0;j<i;j++) if(A[i]>A[j])
dp[i]=max(dp[i],dp[j]+A[i]);
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
return 0;
}