看懂最长上升子序列这个就简单了
这个时候的初始化就不是1了,求和的,当然就是本身的数值了,
最大上升子序列之和的初始化
dp[i]=a[i];
最长上升子序列的初始化
dp[i]=1;
在状态转移中
最大上升子序列之和的转移方程
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(a[i]>a[j])
dp[i]=max(dp[i],dp[j]+a[i]);
最长上升子序列的转移方程
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(a[i]>a[j])
dp[i]=max(dp[i],dp[j]+1);
直接上代码
//动态规划-最大上升子序列的值
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,c;
cin>>n;
int a[10],dp[10];
for(int i=1;i<=n;i++)
{
cin>>a[i];
dp[i]=a[i];
}
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(a[i]>a[j])
dp[i]=max(dp[i],dp[j]+a[i]);
for(int i=1;i<=n;i++)
cout<<dp[i]<<" ";
return 0;
}
看不懂?联系博主(qq3100310659)(备注:c++学习)不备注就不给通过哦