文章
18
粉丝
0
获赞
77
访问
3.3k
#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
//非连续子序列求最大上升子序列和
int main(){
int n;
while(cin>>n){
vector<int> nums(n),dp(n);
for(int i=0;i<n;i++){
cin>>nums[i];
dp[i]=nums[i];//dp[i]的含义是以当前元素为尾巴的子序列中最大的子序列和
}
int res=dp[0];//初始化
for(int i=1;i<n;i++){//遍历顺序,双重循环与之前每个元素作比较
for(int j=0;j<i;j++){//递推公式
if(nums[i]>nums[j]) dp[i]=max(dp[i],dp[j]+nums[i]);//自己的推导1 8 4 9 18 8 17
}
if(dp[i]>res) res=dp[i];//每一轮比较...
登录后发布评论
暂无评论,来抢沙发