题目:最大上升子序列和
思路:
dp。
f[i]表示以a[i]结尾的最大上升子序列和。
转移方程:f[i]=max(f[i],f[j])+a[i] ( i∈[1,j-1),a[i]<a[j] )
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000
#define maxm 10000
int n;
int a[maxn+5]= {0};
int f[maxn+5]={0};
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
for(int j=1;j<i;j++){
if(a[j]<a[i]) f[i]=max(f[i],f[j]);
}
f[i]+=a[i];
}
int ans=0;
for(int i=1;i<=n;i++) ans=max(f[i],ans);
printf("%d",ans);
return 0;
}
本文介绍了一种求解最大上升子序列和的动态规划算法。通过定义状态f[i]为以a[i]结尾的最大上升子序列和,并利用转移方程f[i]=max(f[i],f[j])+a[i]来迭代更新状态,最终找到整个序列的最大上升子序列和。
499

被折叠的 条评论
为什么被折叠?



