首页 > 其他分享 >(nice!!!)LeetCode 3130. 找出所有稳定的二进制数组 II(动态规划dp)

(nice!!!)LeetCode 3130. 找出所有稳定的二进制数组 II(动态规划dp)

时间:2024-08-07 23:53:10浏览次数:9  
标签:sta int dfs II zero limit 3130 LeetCode mod

题目:3130. 找出所有稳定的二进制数组 II

在这里插入图片描述
在这里插入图片描述
思路:大佬的思路

class Solution {
public:
    int mod=1e9+7;
    typedef long long LL;
    LL sta[1010][1010][2];
    //当前还有i个0、j个1时,第i+j的位置放置u,可以组成的合法数目
    LL dfs(int i,int j,int u,int limit){
    	//当0、1中有数量为负数,说明此状态是不合法的
        if(i<0||j<0) return 0;
        //当0的数量为空时,后面就只能放置1了
        if(i==0&&u==1&&j<=limit) return 1;
        //当1的数量为空时,后面就只能放置0了
        if(j==0&&u==0&&i<=limit) return 1;
        //记忆化搜索
        if(sta[i][j][u]!=-1) return sta[i][j][u];
        LL res=0;
        //当第i+j的位置放置0,那么下一个位置可以放置0和1,但是连续的0个数不能超过limit个,所以需要减掉不合法的情况
        //因为dfs()返回的都是合法的情况,所以是减去dfs(i-1-limit,j,1,limit)
        if(u==0){
            res=(dfs(i-1,j,1,limit)+dfs(i-1,j,0,limit)-dfs(i-1-limit,j,1,limit))%mod;
        }else{
            res=(dfs(i,j-1,1,limit)+dfs(i,j-1,0,limit)-dfs(i,j-1-limit,0,limit))%mod;
        }
        return sta[i][j][u]=(res+mod)%mod;
    }
    int numberOfStableArrays(int zero, int one, int limit) {
        memset(sta,-1,sizeof sta);
        return (dfs(zero,one,1,limit)+dfs(zero,one,0,limit))%mod;
    }
};

标签:sta,int,dfs,II,zero,limit,3130,LeetCode,mod
From: https://blog.csdn.net/weixin_46028214/article/details/140967434

相关文章

  • 反转字符串II(541)
    题目描述给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。解题思路如果按照我们暴力解法的话我......
  • Python 中的排序与 ASCII 编码解析
    1.引言    不知道你有没有想过用Python进行一些排序的工作,对于一些数量比较小的数字集合(例如:1、15、32、79、6、55)我们可以迅速发现最大的79和最小的1,但当这个数量非常大的时候,我们找大小就很费劲了,而这种繁琐的工作就应该派计算机出马了2.比大小  a.常规数字比......
  • 代码随想录day 48 每日温度 | 下一个更大元素 I | 下一个更大元素II
    每日温度每日温度解题思路单调栈的意思其实是指栈内的元素单调递增/递减,我们可以通过这个特性存储元素的下标,然后每次入栈时与栈顶坐标的元素进行比较,如果小于等于就不需要弹出直接存入,如果大于,则需要不断弹出栈顶直到遇到一个小于其的栈顶元素或者栈为空。知识点单调栈心......
  • 关于武汉芯景科技有限公司的带中断及复位功能2选1IIC主选择芯片XJ9541开发指南(兼容PC
    一、芯片引脚介绍1.芯片引脚2.引脚描述二、典型应用电路三、功能描述1.Register02.Register13.Register2四、程序代码    此处只展示master0的代码,master1也可以直接套用此代码XJ9541master0.CPP#include"Arduino.h"#include<Wire.h>#inclu......
  • leetcode 1486. 数组异或操作 https://leetcode.cn/problems/xor-operation-in-an-arr
    1486.数组异或操作题目描述给你两个整数,n和start。数组nums定义为:nums[i]=start+2*i(下标从0开始)且n==nums.length。请返回nums中所有元素按位异或(XOR)后得到的结果。示例示例1:输入:n=5,start=0输出:8解释:数组nums为[0,2,4,6,8],其中(0^......
  • LeetCode150 逆波兰表达式求值
    前言题目:150.逆波兰表达式求值文档:代码随想录——逆波兰表达式求值编程语言:C++解题状态:成功解答!思路还是利用栈的思想,遍历到数字时,加入栈,遍历到运算符时,取出两个数进行运算,并将结果加入到栈中。代码classSolution{public:intevalRPN(vector<string>......
  • Leetcode 141. 环形链表(超详图解,解析过程)
    141.环形链表点击跳转leetcode原题给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos......
  • 每日一题:Leetcode-24 两两交换链表中的节点
    力扣题目解题思路java代码力扣题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]......
  • leetcode数论(1232. 缀点成线)-几何
    前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。数论包含最大公约数(>=2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。描述给定一个数组 coor......
  • 《LeetCode热题100》---<5.②普通数组篇五道>
    本篇博客讲解LeetCode热题100道普通数组篇中的五道题第三道:轮转数组(中等)第四道:除自身以外数组的乘积(中等)第三道:轮转数组(中等) 方法一:使用额外的数组classSolution{publicvoidrotate(int[]nums,intk){intlen=nums.length;int[]newAr......