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
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