首页 > 编程语言 >KY78 最大上升子序列和C++

KY78 最大上升子序列和C++

时间:2024-02-19 14:35:33浏览次数:26  
标签:KY78 int sum long 最大值 C++ 序列 maxsum

这个解决问题的思路使用动态规划,即用已知状态去得到未知状态。

思路逻辑是这样 sum[i]记录以A[i]为末上升子序列的和的最大值

然后从j 从 0-i-1 遍历

如果A[j]<A[i] 那么 sum[i]=sum[j]+A[i];

然后找出sum[i]中的的最大值,就是以A[i]为末上升子序列的和的最大值。这样就实现了从前面状态到后面状态的推广。

#include<iostream>
#include<cstdlib>
using namespace std;

void coutmax(long sum[],int n){
    long max=sum[0];
    for(int i=1;i<n;i++){
        if(sum[i]>max) max=sum[i];
    }
    cout << max <<'\n';
}

int main(){
    int n=0;
    while(cin >> n){
        char c;
        c=getchar();//读入换行
        int* a=(int*)malloc(sizeof(int)*n);
        long* maxsum=(long*)malloc(sizeof(long)*n);
        for (int i=0;i<n;i++){
            cin >> a[i];
            maxsum[i]=a[i];
        }
        for(int i=1;i<n;i++){
            for(int j=0;j<=i-1;j++){
                if(a[i]>a[j]){
                    if(maxsum[j]+a[i]>maxsum[i]){
                        maxsum[i]=maxsum[j]+a[i];
                    }
                }
            }
        }
        coutmax(maxsum,n);
    }
    return 0;
}

结果:

标签:KY78,int,sum,long,最大值,C++,序列,maxsum
From: https://www.cnblogs.com/llllmz/p/18021021

相关文章

  • FUN GAME 一款普通的C++游戏
    凑合看吧,不是完整版。#include<bits/stdc++.h>#include<windows.h>#include<conio.h>usingnamespacestd;#defineptputs#definepfprintf#definepcputchar#definesfscanf#definegtgets#defineslSleepcharname[101];stack<int>gun;bo......
  • day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列
    题目:491.非递减子序列我的感悟:难不怕,不行就抄一遍,再默写一遍,多记忆几遍。加油!!!理解难点:uset是本层的, res收获的是节点(满足要求的节点),不用return(用了return是仅仅收集叶子节点的)判断的逻辑,是nums[i]当前的节点和目标的path的区别代码示例:classSolution:......
  • P3411 序列变换 题解
    自己做不出来,看现在题解区的题解讲的都不咋清楚。懂了之后来为后人铺路。而且我的马蜂比较好看题目传送门我能看懂这道题,主要是依靠了这篇题解的帮助。首先我们只关注数的相对关系,所以可以离散化。注意到值域\(10^6\),用数组离散化。这道题可以用贪心做。(有一些定义先往下看)......
  • JAVA基础-序列化
    1,什么是序列化?Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。2,序列化的使用场景永久性保存对象,保存对的字节序列到本地文件或者数据库中;通过序列化以字节流的形式对象在网络中进行传递和接收;通过序列化在进程间传递......
  • 递增子序列--连续与不连续
    问题一:最长严格递增子序列的长度题目:给定一个整数数组nums,找到其中最长严格递增子序列的长度。状态定义:dp[i]表示以nums[i]结尾的最长严格递增子序列的长度。状态转移方程对于每个nums[i],遍历其之前的所有元素nums[j](j从0到i-1),如果nums[i]>nums[j],则可以考虑......
  • 15. C++类中成员变量的初始化总结
    C++类中成员变量的初始化总结1.普通的变量:一般不考虑啥效率的情况下可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。classCA{public:intdata;public:CA();};/*********/CA::CA():data(0)//……#1……初始化列表方式{......
  • KY22 最大序列和C
    题目例子给的很好,还有不要遗漏全是负数的情况。#include<stdio.h>#include<math.h>intmain(){longlongn=0;while(scanf("%ld",&n)!=EOF){longlongsum=0;longlongmax=0;inttag=0;longlongmaxn=pow(-2,63);......
  • KY148 还是畅通工程C++
    求图的最小生成树。克鲁斯卡尔算法来解决。就是选择n-1条最小边且无回路。回路判断用并查集就行。即要加入的边(两个节点)具有相同的父节点说明如果这两个节点本来就存在路径,再加入一条边就会产生回路,舍去。#include<iostream>#include<algorithm>usingnamespacestd;struc......
  • C++ 模板的笔记1
    C++模板的笔记1C++函数模板函数模板的定义函数模板是一种可以生成不同类型函数的函数声明。函数模板的参数类型不是固定的,而是在调用时由实参类型推导出来。语法:template<typename参数列表>函数返回值类型函数名(参数列表){函数体}示例:template<typenameT>vo......
  • 代码随想录算法训练营第十八天 | 112. 路径总和,113. 路径总和ii ,106.从中序与后序遍
     513.找树左下角的值 已解答中等 相关标签相关企业 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层最左边 节点的值。假设二叉树中至少有一个节点。 示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,n......