DP基础题 求的是上升子序列的最大和 而不是最长上升子序列LIS
DP[i]表示以a[i]结尾所能得到的最大值 但是a[n-1]不一定是整个序列能得到的最大值
#include <bits/stdc++.h> using namespace std; const int maxn=1e3+5; int dp[maxn],n,a[maxn]; int main() { while(scanf("%d",&n)&&n) { memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) scanf("%d",&a[i]); int sum,ans=0; for(int i=0;i<n;i++) { sum=0; for(int j=0;j<i;j++) { if(a[j]<a[i]) sum=max(sum,dp[j]); } dp[i]=sum+a[i]; ans=max(ans,dp[i]); } printf("%d ",ans); } return 0; }