数位DP
123
hesorchen
这个作者很懒,什么都没留下…
展开
-
数位DP、多少小于n的数包含k个非0位
题目到处都是0解题思路数位DP板子改改代码#include <bits/stdc++.h>using namespace std;const int N = 1e2 + 5;char s[N];long long dp[N][5];int n;long long dfs(int pos, int lim, int k){ if (k < 0) return 0; if (pos > n) return k原创 2021-10-08 21:20:17 · 91 阅读 · 0 评论 -
牛客A|B数位DP
题目链接DP题目的状态表示真的很重要,直接决定了解决这题的时间、空间效率。#include <bits/stdc++.h>using namespace std;long long s[40], t, x, a;long long dp[40];long long dfs(long long pos, long long lim){ if (pos == 0) return 1; if (!lim && dp[pos] != -1原创 2021-01-20 21:47:12 · 2048 阅读 · 0 评论 -
HDU4734数位DP
题目链接 HDU4734第一次用比较复杂的写法,需要把DP数组初始化放在多组里边,无论怎么优化也TLE。看完题解之后,发现可以通过思路转化,很巧妙的把初始化放在外面,可以使多组数据同时使用DP数组。以后遇到DP题目,可以用不同的DP表示,效率上可能会相差甚远。DP[i][j]表示后i位,和小于等于j的方案数。知道DP的状态表示后,就很简单啦。AC代码:/* * @Author: hesorchen * @Date: 2020-12-30 15:48:28 * @LastEditTime: 2原创 2021-01-19 21:31:29 · 2727 阅读 · 1 评论 -
HDU3652 B-number数位DP+秦九韶算法大数取模
题目链接 HDU3652问一个区间内的B-number的数量,B-number的定义是:数位中含有13,另外能被13整数。例如13,130就是B-number。数位中含有13是数位DP板子,取模使用秦九韶算法。AC代码:#include <bits/stdc++.h>using namespace std;#define ll long longll a[20];ll dp[11][2][2][13][2];ll dfs(ll pos, ll limit, ll sta,原创 2021-01-18 16:19:27 · 3378 阅读 · 0 评论 -
POJ - 3252二进制数位DP
给一个区间,让你求出区间内有多少个round numbers,所谓的round numbers就是二进制表示下,0的数量比1的数量多的数。二进制数位DP,需要注意的地方:1.前导0不算二进制表示下的0的数量,因此前面有1,后面的0才算数量。2.数位DP的记忆化,必须要保证!limit或者limit,避免状态冲突!AC代码:#include <iostream>#include <cstring>using namespace std;#define ll long原创 2021-01-18 09:14:47 · 3724 阅读 · 0 评论 -
HDU2089不要62数位DP入门
前言上学期差不多整个学期都在打各种比赛,几乎没学新算法,因此寒假好好补一波算法,不过数位DP入个门也花了我两天,学习效率还没回来… …模板题题目链接给定一个数字区间[l,r],问你区间内有多少数不含4,也不含连续的62。题目范围是1e7,可以On预处理+前缀和O1查询,代码就不放了。数位DP今天的重点是数位DP。数位DP的好处在于直接对位进行暴力,另外加上记忆化,可以大大减少时间。例如枚举千位时,一次枚举就相当于暴力下的一千次枚举。初学数位DP,我感觉他的本质就是记忆化搜索。因此先上无原创 2021-01-12 21:28:09 · 3243 阅读 · 0 评论