http://acm.hdu.edu.cn/showproblem.php?pid=1087

 

 1 #include <iostream>
 2 #define MAX 1000
 3 //dp公式 sum[i] = max(sum[j])+arr[i],j<i且arr[i]>arr[j]
 4 //求出arr[i]为结尾的上升序列的最大值,arr[i](i={1-n})中最大的值即为所求.
 5 using namespace std;
 6 int main()
 7 {
 8     int n;
 9     int arr[MAX+10];
10     int sum[MAX+10];
11     while(scanf("%d",&n)&&n!=0)
12     {
13         for(int i=1;i<=n;i++)
14         {
15             scanf("%d",&arr[i]);
16         }
17         sum[1= arr[1];
18         int max=arr[1];
19         for(int i=2;i<=n;i++)
20         {
21             int temp=0;
22             for(int j=1;j<i;j++)
23             {
24                 if(arr[i]>arr[j])
25                 {
26                     if(temp<sum[j])
27                     {
28                         temp=sum[j];
29                     }
30                 }
31             }
32             sum[i]=temp+arr[i];
33             if(sum[i]>max)
34             {
35                 max = sum[i];
36             }
37         }
38         cout<<max<<endl;
39     }
40     return 0;
41 }
42