最大上升子序列和
题目概述:给定一个序列,求解该序列的最大上升子序列的和
解题思路:我们在LIS的集合定义为:以i结尾的上升子序列的最大长度,那其实我们只需要将集合定义改为:以i结尾的上升子序列的最大和即可。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <set>
#include <vector>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
typedef pair<int,int>PII;
const int N = 5010;
int num[N];
int f[N];
void solve(){
int n;
cin >> n;
for(int i = 0; i < n; i ++){
int a;
cin >> a;
num[i] = a;
}
int res = 0;
for(int i = 0; i < n; i ++){
f[i] = num[i];
for(int j = 0; j < i; j ++){
if(num[j] < num[i])f[i] = max(f[i],f[j] + num[i]);
}
res = max(res,f[i]);
}
cout << res << endl;
}
int main(){
int T = 1;
while(T --){
solve();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!