題目链接: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 }