传送门 数位dp板子题. f[i][mod]" role="presentation" style="position: relative;">f[i][mod]f[i][mod]表示当前进行到第i位,所有数位数字之和的余数是mod" role="presentation" style="position: relative;">modmod时的种类数,根据当前位选择是否有限制转移就行了. 代码…
描述 求给定区间[X,Y]中满足下列条件的整数个数:这个数恰好等于K个互不相等的B的整数次幂之和. 例如,设X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意: 17 = 24+20, 18 = 24+21, 20 = 24+22. 输入 第一行包含两个整数X和Y.接下来两行包含整数K和B. 输出 只包含一个整数,表示满足条件的数的个数. 样例输入 15 20 2 2 样例输出 3 提示 数据规模:1 ≤ X ≤ Y ≤ 2^31−1,1 ≤ K ≤ 20, 2 ≤ B ≤ 10…
传送门 好题啊. 我只会写l,rl,rl,r都很小的情况(然而题上并没有这种数据范围). 但这个dp转移式子可以借鉴. 我们用f[i][j][k]f[i][j][k]f[i][j][k]表示当前在第i位,模7余j,当前位是k. 显然有f[i+1][([j∗10+l)f[i+1][([j*10+l)f[i+1][([j∗10+l)%7][l]+=f[i][j][k]7][l]+=f[i][j][k]7][l]+=f[i][j][k]. 但是i上限1e91e91e9,直接做会凉. 于是我们构造矩阵来…
魔法数字 题目背景 ASDFZ-NOIP2016模拟 题目描述 在数论领域中,人们研究的基础莫过于数字的整除关系.一般情况下,我们说整除总在两个数字间进行,例如 a | b(a能整除b)表示 b 除以 a 的余数为 0 . 我们称一个数字 X 是魔法的,当且仅当 X 是整数,且它能被 K 及 K 以上种一位数整除,要求这若干种一位数均在 X 的十进制表示中出现. 给出整数 K.L.R,请你计算出在区间 [L,R] 中,有多少个魔法数字. 输入格式 输入一行三个整数 K.L.R. 输出格式 输出一…
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2494  Solved: 1101[Submit][Status][Discuss] Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次.…
最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec  内存限制: 128 MB提交: 31  解决: 4[提交][状态] 题目描述 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排, 每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数 字计数问题要求对给定书的总页码n,计算出书的全部页码中…
很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<cstring> #define ll long long #define R register ll using namespace std; ll f[][],a,b; //f[l][sum]对应dfs中(因为只在!ul&&!ck的时候记忆化) ]; ll dfs(int l,bool…
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中仅包含一行两个整数\(a,b\),含义如上所述. 输出格式 输出文件中包含一行 \(10\) 个整数,分别表示 \(0-9\) 在 \([a,b]\) 中出现了多少次. 说明/提示 \(30\%\)的数据中,\(a<=b<=10^6\): \(100\%\)的数据中,\(a<=b<=1…
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k.游戏的要求是使你所得的k最大或者最小. 例如,对于下面这圈数字(n=4,m=2): 要求最小值时,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值时,为((2+4+3) mod…
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有  数位dp的题一般都会用到前缀数组,题目要求我们求b-a这个区间里各个数码出现的次数,我们可以分别求出(0,b)和(0,a-1)然后相减即可 具体分析请看代码,写的还算详细 #include <bits/stdc++.h> using namespace std; typedef long lo…
题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 Mike 正在在忙碌地发着各种各样的的短信.旁边的同学 Tom 注意到,Mike 发出短信的接收方手机号码似乎都满足着特别的性质,难道Mike 的好朋友是满足正态分布的?Tom 很好奇. 由于 Mike 有着自己最喜欢的数字 a ,并且 a 的范围是:2≤a≤9 .Tom 从这里入手,发现了一些端倪,假设 Mike 发的电话号码是一个十进制数字 S ,Tom 发现 S 会满足以下三个性质中的一个: 1.S 是 a 的倍数…
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次. 单独考虑每一位,数位dp,注意前导零 /************************************************************** Problem: 1833 User: walf…
Game 题目背景 SOURCE:NOIP2015-SHY4 题目描述 Alice 和 Bob 正在玩一个游戏,两个人从 1 轮流开始报数,如果遇到 7 的倍数或者遇到的这个数的十进制表示中含 7 ,则遇到的那个人需要喊"过". 例如: 1 2 3 4 5 6 过 8 9 10 11 12 13 过 15 16 过 18 -- 游戏过后,Bob 提出了一个问题:在区间 [L,R] 里有多少数要喊"过"? 输入格式 第一行一个整数 N ,表示共有 N 组数据. 接下来…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算前导零). 我的做法 首先把询问的[a,b]拆成[0,b]减去[0,a-1]的个数. 我们考虑算前导零的情况.此时可以逐位确定数字:如果某一位的数字<给定的数在那位的数字,那么显然后面的数字可以随便取,于是把所有后面随便取的10^k个数字之中的0~9的出现次数统计一下(这个稍微推一推就出来了嘛...…
题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因为要处理前缀0,所以根本搞不懂. 查询了dalaolidaxin的博客,又查阅了资料: 初探数位dp 才完全弄懂这个题. 具体的,我们设 f[i][j][k]为考虑所有i位数,最高位为j数,之中k的数目. 我们可以得出方程: \[f[i][j][k] = \sum f[i-1][l][k] (j!=…
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义f[i][j][k]表示若前i个位置有k个j的此时的全局方案数,然后就可以记忆化搜索了(具体看代码吧) 代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #inclu…
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k.游戏的要求是使你所得的k最大或者最小. 例如,对于下面这圈数字(n=4,m=2): 要求最小值时,((2−1)mod10)×((4+3)mod10)=1×7=7,要求最大值时,为((2+4+3)mod10)×(−…
题面 JZM 想要创造两个数字 x 和 y,它们需要满足 x or y = T,且Lx ≤ x ≤ Rx, Ly ≤ y ≤ Ry,JZM 想知道 x and y 有多少种可能的不同的取值.若有多组 (x, y) 有相同的 x and y 的取值,则只算一次. 0 ≤ T,Lx,Rx,Ly,Ry < 260. Sample Input 11 3 10 8 13 Sample Output 7 题解 看上去貌似是数位 DP,于是我们就设计一个 DP: d p [ i ] [ s 1 ] [ s 2…
个人心得:数位dp处理起来是真的麻烦,本来动态规划就够头疼的了,菜的一批. 来看这个题目吧,题目在下面. 把题目变成可以求得就是求前n个数中1-n*9的情况的总和,所以用dp[i][j],表示前i个数中和为j的个数. 状态转移方程就是 dp[i][j]=dp[i-1][j-k]  0=<k<=9; 但是后面要注意前导为0的情况所以总和ans=(dp[i][j]-dp[i-1][j])*dp[i][j](后面N段不需要考虑前导为0的情况,前面前导为0的情况就是前n-1位中和为j的值) 脑瓜子还是…
https://www.luogu.org/problemnew/show/P2602 第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的. 核心思想就是分类讨论,分不同情况讨论对答案的贡献. 最最重要的是,该数位取与当前位相等的时候,贡献的个数是受这个数位影响的所有数(这个写法里包括它本身),那么就用x减去与x前缀相同的“整数”再+1就可以算出来了. 其他的数位dp……好像就不太会写了,再研究一下. #include<bits/stdc++.h> using na…
传送门 题目中已经给好了sg图,直接在上面跑出sg函数即可. 最后看给定点的sg值异或和是否等于0就判好了. 代码: #include<bits/stdc++.h> #define N 2005 #define M 6005 using namespace std; int n,m,k,sg[N],first[N],First[N],du[N],cnt=0,ans=0; bool vis[N]; queue<int>q; struct edge{int v,next;}e[M],E…
传送门 同样有一个显然的结论. 如果a1a_1a1​ xorxorxor a2a_2a2​ xorxorxor a3a_3a3​ xor...xor...xor... xorxorxor ana_nan​为0那么后手胜. 否则先手胜. 这个可以用二进制的对称性来辅助思考. 代码: #include<bits/stdc++.h> using namespace std; int main(){ int n,x=0,y; cin>>n; for(int i=1;i<=n;++i)…
传送门 好像是某年的初赛题啊. 有个很显然的结论. 当n" role="presentation" style="position: relative;">nn mod" role="presentation" style="position: relative;">modmod (m+1)=0" role="presentation" style="po…
传送门 就是一个exgcd的板子. 但注意算距离差的时候是在一个环上面算. 还有,答案要开long long233... 注意这两点之后就是exgcd板子了. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; inline ll gcd(ll a,ll b){while(b){ll t=a;a=b,b=t%a;}return a;} ll a,b,c,d,e,T_T,x,y,tmp; inline voi…
传送门 三进制状压感觉有点难写啊. 不过这题状态转移方程挺简单的. 就直接f[i][j]表示前i行第i行状态为j时的选法总数,分情况转移就行了. 代码: #include<bits/stdc++.h> #define ll long long #define mod 1000000 #define N 10005 using namespace std; int n,m,K,ban,ans=0,sta[1005],tot=0,stat,f[N][1005],bit[6],pos; inline…
传送门 斜率优化dp经典题. 令f[i]表示i这个地方修建仓库的最优值,那么答案就是f[n]. 用dis[i]表示i到1的距离,sump[i]表示1~i所有工厂的p之和,sum[i]表示1~i所有工厂的p*dis之和. 那么有状态转移方程: f[i]=min(f[j]+dis[i]∗(sump[i−1]−sump[j])−(sum[i]−sum[j])+c[i])" role="presentation" style="position: relative;&quo…
传送门 斜率优化dp经典题. 题目中说的很清楚,设f[i]表示前i个数分配出的最大值. 那么有: f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+C)" role="presentation" style="position: relative;">f[i]=max(f[j]+A∗(sum[i]−sum[j])2+B∗(sum[i]−sum[j])+C)f[i]=max(f[j]+A∗(sum[i…
传送门 斜率优化dp好题. 对于第i只猫,显然如果管理员想从出发开始刚好接到它,需要在t[i]=h[i]−dist(1,i)" role="presentation" style="position: relative;">t[i]=h[i]−dist(1,i)t[i]=h[i]−dist(1,i)的时候出发才行. 这样的话,如果把第l~r只猫分成一组,那么当前分组需要的最小花费是 t[r]−t[l]+t[r]−t[l+1]+t[r]−t[l+2]+…
传送门 树形dp好题啊. 我们用w[i]" role="presentation" style="position: relative;">w[i]w[i]表示以i为根的子树最少可以把在子树外的榕树之心向子树里拉多少距离. 我们令i最大的子树的根为ms" role="presentation" style="position: relative;">msms. 那么有几种情况: 1. size[…
这篇写在简书了,就不费力气搬了,给简书留一篇. https://www.jianshu.com/p/13bbbf804b71…