参考: http://blog.youkuaiyun.com/jdplus/article/details/20226807
N最大为1000,太大,用0-1背包会TLE,学习上面blog中的方法,动态规划确实应该好好学习下
代码:
/*
by qr jobdu 1480 2014-9-19
*/
#include <stdio.h>
int compute(int arr[1000],int n){
int dp[1000];//dp数组就是子序列的和
int i;
for(i=0;i<n;i++){
dp[i]=arr[i];//初始值不是0
for(int j=0;j<i;j++){
if(arr[j]<arr[i] && dp[i]<dp[j]+arr[i]){
//加入该子序列需要使 1)前面的数小,即序列是上升的 data[j]<data[i] 来控制
//2) 找到最大子序列 dp[i]<dp[j]+data[i] 来控制
dp[i]=dp[j]+arr[i];
}
}
}
int max=-5;
for(i=0;i<n;i++){
if(dp[i]>max)
max=dp[i];
}
return max;
}
int main(){
int n;
int arr[1000];
while(scanf("%d",&n)!=EOF){
int i;
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int res=compute(arr,n);
printf("%d\n",res);
}
return 0;
}