最大上升子序列和
题目描述
核心思路
f[i]:表示以i这个位置的数为最后数字的所有方案中最长序列和最大的数
代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int n;
int a[N];
int dp[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int ans=0;//最大上升子序列和
for(int i=1;i<=n;i++)
{
dp[i]=a[i];//单独一个数的话,它自身就是最大上升子序列和
for(int j=1;j<i;j++)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+a[i]);
}
//通过比较以某个数a[i]为结尾所得的最大上升子序列和,最终得到真正的最大的那个上升子序列的和。
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}