思路:动态规划,记录最大上升序列结尾数字下标;for循环倒着找出最大上升序列的首下标。
输出格式:
1.全为负数,输出格式是0 nums[0] nums[nums.size()-1];
2.正常按照普通格式输出就可以
#include<bits/stdc++.h>
using namespace std;
vector<int> nums;
int start=0,enD=0,sum=0,maxn=INT_MIN;
int main(){
int i,n;
cin>>i;
while(i--){
cin>>n;
nums.push_back(n);
}
for(int j=0;j<nums.size();j++){
sum=max(sum+nums[j],nums[j]);
if(sum>maxn){
maxn=sum;
enD=j;
}
}
if(maxn<0) cout<<0<<' '<<nums[0]<<' '<<nums[nums.size()-1];
else{
int sum=0;
for(int j=enD;j>=0;j--){
sum+=nums[j];
if(sum==maxn){
start=j;
break;
}
}
cout<<maxn<<' '<<nums[start]<<' '<<nums[enD];
}
return 0;
}
该博客介绍了一个使用动态规划求解最大上升子序列的C++程序。程序首先读取一系列整数,然后通过动态规划计算最大上升子序列的和及其结束下标。如果所有数都是负数,输出特定格式,否则按照普通格式输出最大上升子序列的长度及起始和结束元素。
1130

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



