http://acm.hdu.edu.cn/showproblem.php?pid=1087
题意:求和最大的上升子序列。
题解:dp;
代码:
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long dp[1005],a[1005];
long long inf=0x3f3f3f3f3f;
int main()
{
int n,i,j;
while(scanf("%d",&n)){
if(!n)break;
for(i=1;i<=n;i++)scanf("%lld",&a[i]);
a[n+1]=inf;
memset(dp,0,sizeof(dp));
for(i=1;i<=n+1;i++)dp[i]=a[i];
for(i=2;i<=n+1;i++){
for(j=1;j<i;j++){
if(a[j]<a[i]){
dp[i]=max(dp[j]+a[i],dp[i]);
}
}
}
printf("%lld\n",dp[n+1]-inf);
}
// cout << "Hello world!" << endl;
return 0;
}