题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087
题目的大概意思就是给你n个无序的数,要求你找出递增的子序列的最大的和值,其实就是动态规划问题,我们需要计算每个当前值的最大值,然后找出最大的和值就可以了。
代码如下:
#include <iostream>
#include <cstring>
#include <string>
#include <math.h>
#include <stdio.h>
#include <algorithm>
using namespace std;;
int dp[1005];
int a[1005];
int main()
{
int n,v,t;
while(cin>>t&&t)
{
memset(dp,0,sizeof(dp));
for(int i=0;i<t;i++)
{
cin>>a[i];
}
dp[0]=a[0];
for(int i=1;i<t;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]>a[j])
dp[i]=max(dp[i],dp[j]+a[i]);
else
dp[i]=max(dp[i],a[i]);
}
}
sort(dp,dp+t);
cout<<dp[t-1]<<endl;
}
return 0;
}