首页 > 其他分享 >801. 使序列递增的最小交换次数(状态机dp)

801. 使序列递增的最小交换次数(状态机dp)

时间:2023-08-26 13:23:33浏览次数:50  
标签:min int 状态机 dp && 801 nums1 nums2

 

dp的本质就是图论

状态机dp就是包含多个待选状态,个人感觉就是分层图,每一层是一个状态,不同状态之间有可以相互转化的方法。通过状态和状态之间的关系,来实现状态转移。

本题f[i][j]表示只从前i项中选,f[i][0]表示第i项不进行交换,f[i][1]表示第i项进行交换,达到严格递增情况下所需要的最小操作次数。

状态转移:

  若nums1[i] > nums1[i - 1] && nums2[i] > nums2[i - 1]则可以将两个数字一起交换,要么一起交换,要么一起都不换,有 f[i][0] = f[i - 1][0], f[i][1] = f[i - 1][1] + 1;

  若nums1[i] > nums2[i - 1] && nums2[i] > nums1[i - 1]则可以交换第i项或第i - 1项, 有f[i][0] = min(f[i][0], f[i - 1][1]), f[i][1] = min(f[i][1], f[i - 1][0] + 1);

class Solution {
public:
    int minSwap(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size();
        vector<vector<int>> f(n, vector<int>(2));
        f[0][0] = 0, f[0][1] = 1;
        for(int i = 1; i < n; i ++ ) f[i][0] = f[i][1] = 0x3f3f3f3f;

        for(int i = 1; i < n; i ++ ) {
            if(nums1[i - 1] < nums1[i] && nums2[i - 1] < nums2[i]) {
                f[i][0] = f[i - 1][0];
                f[i][1] = f[i - 1][1] + 1;
            }
            if(nums1[i] > nums2[i - 1] && nums2[i] > nums1[i - 1]) {
                f[i][0] = min(f[i][0], f[i - 1][1]);
                f[i][1] = min(f[i][1], f[i - 1][0] + 1);
            }
        }

        return min(f[n - 1][0], f[n - 1][1]);
    }
};

 

标签:min,int,状态机,dp,&&,801,nums1,nums2
From: https://www.cnblogs.com/zk6696/p/17658687.html

相关文章

  • TCP & UDP
    一、TCPTCP是面向连接的、可靠的、基于字节流的传输层通信协议。1、TCP头格式1、序列号:用来解决乱序问题,通过SYN包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。2、确认应答号:用来解决丢包问题,指下一次「期望」收到的数据的序列号,发送端收到这个确......
  • P1113 杂务 (DAG拓扑排序--DP)
    这是一道拓扑排序的模板题0额.所需的前置知识:图论相关的基本概念建图,存图图的遍历非常入门的DP下面进入正文1引入拓扑排序是一类用于处理DAG(Directedacyclicgraph),即有向无环图上的问题。以这道题为例,我们分析拓扑排序的作用:显然地,本题中各项工作是有一定的依......
  • 概率 DP
    一直在等学习概率论这门课后再开,但是老师一节课讲的内容我两分钟就能看完,恰巧昨天打了一次比赛遇到求期望DP,是时候学一下了。概率DP主要用于求解期望、概率等题目。转移方程有时比较灵活。一般求概率是正推,求期望是逆推。通过题目可以体会到这点。——bykuangbin 首先......
  • UDP数据段格式
    UDP数据段 UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。1、源端口号(SourcePort)长度为16位,指明发送数据的进程。2、目的端口号(DestinationPort)长度为16位,指明目的主机接收数据的进程。3、长度长度为16位,该字段值为报头和数据两部分的总字节数。4、检验和(Ch......
  • 状压dp总结
    状压dp总结三进制状压Q&A1.如果我的当前的dp值需要前两个状态才可以推导出来怎么办?很简单,既然我们无法舍弃任何一个状态那我们就加一维将它纳入考虑范围之内,就拿P8756[蓝桥杯2021省AB2]国际象棋做列子我们本列的马最远是可以威胁到前两列的马,那么我们就让dp表......
  • 获得NPDP证书后,能做什么工作?
    NPDP全称为NewProductDevelopmentProfessional,中文翻译为产品经理国际资格认证。NPDP由美国产品开发与管理协会(PDMA)发起,是是国际公认的新产品开发专业认证,集理论、方法与实践为一体的全方位知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。目前NPDP认证已......
  • untity的SerializedProperty介绍
    SerializedProperty是Unity中用于访问和修改序列化对象属性的类。在Unity中,序列化对象是指可以在Inspector面板中显示和编辑的对象,例如组件、脚本等。SerializedProperty提供了访问和修改序列化对象属性的方法,可以通过它来获取属性的值、设置属性的值、判断属性是否可见、获取属......
  • [算法学习笔记] 换根dp
    换根dp一般不会指定根节点,并且根节点的变化会对一些值进行改变。因此我们需要转移根。换根dp一般需要预处理一下一个节点的值,然后对于任意节点开始树上dp转移。所以我们常用两次dfs,第一次dfs预处理,第二次dfs为树上dp。一般比较套路。接下来会给出一个典型例题。典例1:L......
  • 2023下半年杭州/武汉/深圳NPDP产品经理国际认证开班啦
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。  【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业......
  • R语言之 dplyr 包
    文章和代码已经归档至【Github仓库:<https://github.com/timerring/dive-into-AI>】或者公众号【AIShareLab】回复R语言也可获取。这个包以一种统一的规范更高效地处理数据框。dplyr包里处理数据框的所有函数的第一个参数都是数据框名。下面以MASS包里的birthwt数据集为例,介......