输入包含多组测试数据。 每组测试数据由两行组成。第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。
对于每组测试数据,输出其最大上升子序列和。
7 1 7 3 5 9 4 8
18
#include<stdio.h>
int main(void){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
//建立一个空数组,用来存放截止到i时,最大的递增子串
int b[n];
b[0]=a[0];
for(int i=1;i<n;i++){
int temp=-1;
int max=-1;
for(int j=0;j<i;j++){
if(a[j]>=a[i]){
continue;
}else{
if(temp==-1){
max=b[j];
temp=j;
}else{
if(b[j]>max){
max=b[j];
temp=j;
}
}
}
}
if(temp==-1){
b[i]=a[i];
}else{
b[i]=a[i]+b[temp];
}
}
int sum=0;
for(int i=0;i<n;i++){
if(sum<b[i]){
sum=b[i];
}
}
printf("%d ",sum);
return 0;
}