这道题花了不少的时间,因为走了不少的弯路,但是最终还是让我找到了那条比较好走的路。
思路:因为最大的路径可能不是最长的那一条,所以需要找出所有符合的路径。求一个数的值最大路径,从第一个开始接下去求,例如4 1 4 2 3,1的最大路径:1
4的最大路径:5
2的最大路径:3
3的最大路径:6
一步一步地算,需要满足的条件是一条路径是递增的,具体看代码
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
int n,sum,f;
int a[1005],dp[1005];
while(~scanf("%d",&n)&& n){
sum=-1;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
dp[i]=a[i];
f=0;
for(int j=0;j<i;j++){
if(a[j]<a[i])
f=max(dp[j],f);
}
dp[i]+=f;
sum=max(sum,dp[i]);
}
printf("%d\n",sum);
}
return 0;
}