文章

166

粉丝

68

获赞

855

访问

60.4k

头像
最大上升子序列和 题解:最长子序列和求解
P1257 北京大学机试题
发布于2025年2月5日 16:38
阅读数 429

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int n;
  5. while(cin>>n){
  6. std::vector<int> a(n),b(n);
  7. for(int i=0;i<n;i++){
  8. cin>>a[i];
  9. b[i]=a[i];
  10. }
  11. int ans=b[0];
  12. for(int i=1;i<n;i++){
  13. for(int j=0;j<i;j++){
  14. if(a[j]<a[i])b[i]=max(b[i],b[j]+a[i]);
  15. }
  16. ans=max(ans,b[i]);
  17. }
  18. cout<<ans<<endl;
  19. }
  20. }

数组a存储数据内容,用于判断,b存储到该位置的最大子序列和,但是不包含该位置,所以我们只需要扫描求和即可得到结果。b存储的结构设计来源为:我每次都选择递增情况下的前者的所有的数组都进行一次测试,最低,这个状态会取离散本值,如果有更高的,他会叠加得到更大的值。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发