简单的DP题,就是LIS变形而来的LIS和,注意并不要求数之间要相邻
LIS解析详见:http://blog.csdn.net/niteip/article/details/7444973
#include<stdio.h>
#include<string.h>
int a[1005],DP[1005];
int max(int a,int b){
return a>b?a:b;
}
int main(){
int n,re;
while(~scanf("%d",&n) && n){
int i,j;
re=-99999999;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
DP[0]=a[0];
for(i=1;i<n;i++){
DP[i]=a[i];
for(j=0;j<i;j++){
if(a[j]<a[i]){
if(DP[i]<DP[j]+a[i])
DP[i]=DP[j]+a[i];
}
}
}
for(i=0;i<n;i++){
if(re<DP[i])
re=DP[i];
}
printf("%d\n",re);
}
return 0;
}