输入:3 1 3 2
4 1 2 3 4
4 3 3 2 1
0
输出:4
10
3
思路:dp[i]记录以a[i]结尾的序列的最大递增子序列的和,dp[1],dp[2]...dp[n]中的最大值即为所求。
#include<iostream>
#include<cstring>
using namespace std;
const int MAX=1005;
int a[MAX],dp[MAX];
int MaxSum(int *a,int n)
{
int i,j,maxsum;
for(i=0;i<n;i++)
dp[i]=a[i];
maxsum=dp[0];
for(i=1;i<n;i++)
for(j=0;j<i;j++)
{
if(a[i]>a[j]&&dp[i]<dp[j]+a[i])
dp[i]=dp[j]+a[i];
if(maxsum<dp[i])
maxsum=dp[i];
}
return maxsum;
}
int main()
{
int n,idx;
while(cin>>n&&n)
{
for(idx=0;idx!=n;++idx)
cin>>a[idx];
cout<<MaxSum(a,n)<<endl;
}
return 0;
}
浙公网安备 33010602011771号