DP方程:dp[i]=max(dp[i],dp[j]+a[i]); #include<iostream> #include<stdio.h> using namespace std; long long dp[1005]; int a[1005]; int N; int main() { while(scanf("%d",&N),N) { //录入数据 for(int i=1;i<=N;++i) scanf("%d",&a[i]); for(int i=1;i<=N;++i) { dp[i]=a[i]; for(int j=1;j<i;++j) if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+a[i]); } long long max_num=0; for(int i=1;i<=N;++i) max_num=max(max_num,dp[i]); printf("%I64d/n",max_num); } return 0; }