数位DP万能模板

这篇具有很好参考价值的文章主要介绍了数位DP万能模板。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

☆* o(≧▽≦)o *☆嗨~我是小奥🍹
📄📄📄个人博客:小奥的博客
📄📄📄CSDN:个人CSDN
📙📙📙Github:传送门
📅📅📅面经分享(牛客主页):传送门
🍹文章作者技术和水平有限,如果文中出现错误,希望大家多多指正!
📜 如果觉得内容还不错,欢迎点赞收藏关注哟! ❤️

一、数位DP模板

模板出处:两种数位 DP 模板,附题单(Python/Java/C++/Go)
作者:灵茶山艾府

class Solution {
    char[] s; // 表示限制n的字符形式
    int[][] cache; // 记忆化数组 


    // i    表示当前构造的下标
    // cnt 是一个根据题目需求的变量,比如
    //      (1)二进制字符串,如果某个数存在,那么该数对应的二进制数为1
    //         比如{0, 2, 3},则mask为 1101
    //      (2)表示特殊数的个数
    // isLimit 表示前面填的数字是否都是n对应位上的(即是否受到n的约束),
    //      如果为true,那么至多为(int)s[i]
    //      如果为false,否则至多为9
    // isNum 表示前面是否填了数字(是否跳过,一般用于判断前导0是否有影响):
    //      如果为true,那么当前位可以从0开始,
    //      如果为false,那么可以跳过,或者从1开始填数字
    public int dfs(int i, int cnt, boolean isLimit, boolean isNum) {
        if (i == s.length) {
            return cnt; // 返回结果 
        } 
        // 这里是记忆化搜索优化
        if (!isLimit && cache[i][mask] != -1) {
            return cache[i][mask];
        }
        int res = 0;
        // up表示上界,如果前面填的数字和n一样,则至多填 s[i]。否则至多填9。
        int up = isLimit ? s[i] - '0' : 9;
        // 枚举要填入的数字d,一般从0开始,有特殊情况也需要处理
        for(int d = 0; d <= up; d++) {
             res += dfs(i + 1, cnt的处理 , isLimit && d == up, true);
        }
        cache[i][mask] = res;
        return res;
    }
}

二、题单

持续更新中~文章来源地址https://www.toymoban.com/news/detail-797616.html

  • 233. 数字 1 的个数
  • 2376. 统计特殊整数
  • 1012. 至少有 1 位重复的数字
  • 2719. 统计整数数目

到了这里,关于数位DP万能模板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第380场周赛挑战:二分,数位dp和KMP算法的综合运用

    比赛地址 卡在第三题了,应该看看第4题kmp套模版的 二分查找 : findMaximumNumber 函数使用二分查找法来查找符合条件的最大 num 。它初始化左边界 left 为 0,右边界 right 为 (k + 1) (x - 1) 。这个右边界是一个估计值,确保 num 的上界足够高。二分查找在满足条件 left + 1 right 的情况

    2024年02月02日
    浏览(57)
  • dp 就 dp ,数位dp是什么意思 ?

                                                                       💧 dp 就 dp ,数位dp是什么意思 ?💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 数据结构与算法专栏的文章图文并茂🦕生动形

    2023年04月16日
    浏览(37)
  • NC200204 数位 DP

    题意 传送门 NC200204 dh的帽子 题解 可以独立考虑每一位是否合法。维护数字上下界的状态,枚举三个数字,仅对合法的状态进行转移。数位 DP 求解即可,时间复杂度 O ( l o g R ) O(logR) O ( l o g R ) 。

    2024年02月16日
    浏览(40)
  • 数位dp。

    在处理1e9甚至1e18,1e100的问题时,因为在统计情况下有很多重复的计算,数位dp实现了相同状态只计算一次,从而大幅减少运算时间,思想就是对每一位进行dp,计算时记忆化每一位可以有的状态。 如我们在统计1234的状态时,可以拆成统计0~10000,0~2000,0~300,0~40数位统计 我们

    2024年02月01日
    浏览(36)
  • 「学习笔记」数位 DP

    意义不大的题不写了。 点击查看目录 目录 「学习笔记」数位 DP 概述 例题 P2657 [SCOI2009] windy 数 思路 代码 P4317 花神的数论题 思路 P4124 [CQOI2016]手机号码 思路 代码 haha数 题意 思路 代码 0和1的熟练 题意 思路 代码 苍与红的试炼 题意 思路 代码 数位 DP 一般用来解决「在一个较

    2023年04月09日
    浏览(40)
  • 动态规划——数位DP 学习笔记

    引入 数位 DP 往往都是这样的题型:给定一个区间 ([l, r]) ,求这个区间中满足某种条件的数的总数。 简单的暴力代码如下: 而当数据规模过大,暴力枚举就 (mathbb T) 飞了,因此引入数位 DP: 概念 数位(digit):对于十进制,即把一个数字按照个位、十位、百位等,一位

    2024年02月08日
    浏览(47)
  • LeetCode---121双周赛---数位dp

    2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 简单的模拟题,只要按照题目的要求去写代码即可,代码如下 这题考异或的性质---相同为0,相异为1,我们只要关心nums的异或和与

    2024年01月22日
    浏览(56)
  • 异或三角形(数位dp)

    [Link](异或三角 - 蓝桥云课 (lanqiao.cn)) 参考:2021蓝桥杯国赛-J异或三角形-数位dp_塔子哥来了的博客-CSDN博客_蓝桥杯数位dp 给定 T T T 个数 n 1 , n 2 , . . . , n T n_1,n_2,...,n_T n 1 ​ , n 2 ​ , . . . , n T ​ ,对每个 n i n_i n i ​ 请求出有多少组 a , b , c a,b,c a , b , c 满足: 1 ≤ a , b , c ≤

    2024年02月09日
    浏览(42)
  • 周赛348(模拟、反向思维、数位DP)

    难度中等3 给你一个下标从 0 开始的字符串 s ,重复执行下述操作 任意 次: 在字符串中选出一个下标 i ,并使 c 为字符串下标 i 处的字符。并在 i 左侧 (如果有)和 右侧 (如果有)各 删除 一个距离 i 最近 的字符 c 。 请你通过执行上述操作任意次,使 s 的长度 最小化 。

    2024年02月07日
    浏览(74)
  • C++ 动态规划 数位统计DP 计数问题

    给定两个整数 a 和 b ,求 a 和 b 之间的所有数字中 0∼9 的出现次数。 例如,a=1024,b=1032 ,则 a 和 b 之间共有 9 个数如下: 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等… 输入格式 输入包含多组测试数据。 每组测试数据占一

    2024年02月20日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包