#include<map> #include<set> #include<list> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; const int N=1005; int n,a[N],dp[N]; int main() { while(cin>>n,n){ memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++)cin>>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]); if(dp[i]>ans)ans=dp[i]; } } // for(int i=0;i<n;i++)cout<<dp[i]<<endl; cout<<ans<<endl; } return 0; }
https://vjudge.net/contest/68966#problem/E
dp【i】=a【i】这一步一定不能忘了!!