简单的DP
#include<iostream> #include<string> using namespace std; int main() { int a[1010]; int dp[1010]; int n, max; int i1, i2, i3; while( cin >> n ) { if( n == 0) break; for( i1 = 0; i1 < n; i1 ++ ) { cin >> a[i1]; dp[i1] = a[i1]; //先将每个数的递增子序列设为其本身 } for( i2 = 0; i2 < n; i2 ++ ) { max = 0; for( i3 = 0 ; i3 < i2 ; i3++) if( a[i2] > a[i3] && max < dp[i3]) //如果a[i2]前面没有比它小的数,dp[i2] = a[i2], 如果前面有比它小的数, { //那么dp[i2]是在前面比它小的数中, 选出递增子序列最大的数i3 dp[i2]+= dp[i3]; max = dp[i3]; dp[i2]= dp[i3] + a[i2]; } } for( i1 = 0, max = 0; i1 < n; i1++) if( max < dp[i1] ) max = dp[i1]; cout << max << endl; memset( dp, 0, sizeof(dp)); memset( a, 0, sizeof(a) ); } return 0; }