简单DP,最长上升子序列变形
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=1000+10; int a[maxn]; int dp[maxn]; int n; int main() { while(~scanf("%d",&n)) { if(!n) break; for(int i=1; i<=n; i++) scanf("%d",&a[i]); memset(dp,0,sizeof dp); for(int i=1; i<=n; i++) { int Max=0; for(int j=1; j<i; j++) if(a[j]<a[i]) Max=max(Max,dp[j]); dp[i]=Max+a[i]; } int ans=0; for(int i=1; i<=n; i++) ans=max(ans,dp[i]); printf("%d ",ans); } return 0; }