最长上升子序列改版
2026-04-04 15:57:01
发布于:浙江
16阅读
0回复
0点赞
把最长上升子序列加条件即可
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
int dp[n+1];
pair<int,int> p[n+1];
for(int i=1;i<=n;++i) cin>>p[i].second;
for(int i=1;i<=n;++i) cin>>p[i].first;
sort(p+1,p+n+1);
for(int i=1;i<=n;++i){
dp[i]=p[i].second;
for(int j=1;j<i;++j){
if((p[i].first<p[j].first&&p[i].second<=p[j].second)
||(p[i].first>p[j].first&&p[i].second>=p[j].second)
||p[j].first == p[i].first)
dp[i]=max(dp[i],dp[j]+p[i].second);
}
}
int ma=1;
for(int i=1;i<=n;++i){
ma=max(ma,dp[i]);
}
cout<<ma;
return 0;
}
全部评论 2

1周前 来自 浙江
1
3天前 来自 浙江
0











有帮助,赞一个