1330.Max sum
Description
。
令sum=ab1+ab2+…+abm,并且满足:ab1<ab2<…<abm;b1<b2<…<bm;1<=m<=n。
。
第一行,n,表示给定序列的个数。
最大的sum。
Sample Input
6
2 4 1 20 5 6
Sample Output
26
动态规划:最大上升子数列
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int a[1010];//value long long int sum[1001]; int main() { int n; while(~scanf("%d",&n)&&n!=0) { a[0]=0; sum[0]=0; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); sum[i]=a[i]; } for(int i=1; i<=n; i++) { long long int temp=sum[i]; for(int j=i-1; j>=0; j--) { if(a[j]<a[i]) { if((sum[j]+a[i])>temp) temp=sum[j]+a[i]; } } sum[i]=temp; } long long int maxx=0; for(int i=1; i<=n; i++) { maxx=max(maxx,sum[i]); } cout<<maxx<<endl; } return 0; }