題目链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=1087​

思路:动态规划 求n个点的和最大上升子序列 d[i]=max(d[j]+a[i]),(j<i且a[j]<a[i])

1 #include<iostream>
2 #include<algorithm>
3 #include<string>
4 #include<cstring>
5 using namespace std;
6 long long a[1005];
7 long long b[1005];
8 int main()
9 {
10 int n;
11 while(cin>>n&&n!=0){
12 memset(a,0,sizeof(a));
13 memset(a,0,sizeof(b));
14 for(int i=0;i<n;i++){
15 cin>>a[i];
16 b[i]=a[i];
17 }
18 long long sum=0;
19 for(int i=0;i<n;i++){
20 for(int j=0;j<i;j++){
21 if(a[i]>a[j]){
22 b[i]=max(b[i],b[j]+a[i]);
23 }
24 }
25 sum=max(sum,b[i]);
26 }
27 cout<<sum<<endl;
28 }
29 return 0;
30 }