题目:最大上升子序列和
思路:
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;
}