题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087
题意:给你n个数,求n个数的最长上升子序列的和的最大值。
题解:简单的DP ,定义dp【i】为以num【i】结尾的最长上升子序列和的最大值。
然后 看代码把
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+ 5;
int num[maxn],dp[maxn];
int main(){
int n,Max;
while(~scanf("%d",&n)){
if(n == 0) break;
Max = 0;
memset(dp,0,sizeof(dp));
for(int i = 0 ; i < n ; i ++){
scanf("%d",&num[i]);
}
dp[0] = num[0];
for(int i = 1; i < n ; i ++){
for(int j = 0 ; j < i ; j ++){
if(num[i] > num[j]){
dp[i] = max(dp[i],dp[j]+num[i]);
}
}
dp[i] = max(dp[i],num[i]);
}
for(int i = 0 ; i < n ; i ++){
Max = max(Max,dp[i]);
}
printf("%d\n",Max);
}
return 0;
}