BZOJ 3679 数字之积 数位DP】的更多相关文章

思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> #include<iostream> #include<map> #define R register int #define ll long long using namespace std; namespace Luitaryi { template<class I> i…
Description 一个数x各个数位上的数之积记为\(f(x)\) 求[L,R)中满足\(0<f(x)<=n\)的数的个数 solution 最后\(f(x)\)可以拆分成2,3,5,7的乘积,我们就将 \(2,3,5,7\) 压进状态,然后就是基础的数位DP,分是否严格小于两种状态转移即可 具体实现需要一些技巧: 预处理出每一个数含有 \(2,3,5,7\)的个数 预处理出 \(2,3,5,7\) 的幂,方便剪枝 注意数字不能含有 \(0\),我们每DP一位,要新加入 \([1,9]\)…
题意 题目链接 Sol 推什么结论啊. 直接大力dp,$f[i][j]$表示第$i$位,乘积为$j$,第二维直接开map 能赢! /* */ #include<iostream> #include<cstdio> #include<map> #define LL long long using namespace std; inline LL read() { , f = ; ; c = getchar();} + c - ', c = getchar(); retur…
BZOJ_1833_[ZJOI2010]count 数字计数_数位DP 题意: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 分析: 数位DP f[i][j][k]表示i位数,以j开头的数中k出现的次数 预处理出来10的幂(在数位DP中经常会用到) f[i][j][k]+=f[i-1][l][k]+(j==k)*10^(i-1) 之后按位枚举,0的情况特殊处理 代码: #include <stdio.h> #include <string.h…
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i 位,这一位是 t ,那么数码 t 的答案是要加一个值的(见代码). 代码 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmat…
题目 传送门:QWQ 分析 蒟蒻不会数位dp,又是现学的 用$ dp[i][j][k] $ 表示表示长度为i开头j的所有数字中k的个数 然后预处理出这个数组,再计算答案 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll dp[][][], ans[], b[], sum[]; int solve(ll x,ll d){ ; ll bef=x; ){ b[++len]=x%; } ;i<len…
非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include<iostream> #include<cstdio> using namespace std; long long l,r,t[25]; struct dp { long long a[15]; dp operator + (dp x) { dp r; for(int i=0;i&l…
Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块.    一阵风吹过,金子的位置发生了一些变化.细心的小Z发现,初始在(i,j)坐标处的金子会变到(f(i),fIj))坐标处.其中f(x)表示x各位数字的乘积,例如f(99)=81,f(12)=2,f(10)=0.如果金子变化后的坐标不在1..N的范围内,我们认为这块金子已经被移出游戏.同时可以发现,对于变化之后的游戏局面,…
题目描述 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹过,金子的位置发生了一些变化.细心的小Z发现,初始在(i,j)坐标处的金子会变到(f(i),fIj))坐标处.其中f(x)表示x各位数字的乘积,例如f(99)=81,f(12)=2,f(10)=0. 如果金子变化后的坐标不在1..N的范围内,我们认为这块金子已经被移出游戏.同时可以发现,对于变化之后的游戏局面,某些坐标上的金子数…
[BZOJ3679]数字之积 Description 一个数x各个数位上的数之积记为f(x) <不含前导零>求[L,R)中满足0<f(x)<=n的数的个数 Input 第一行一个数n第二行两个数L.R Output 一个数,即满足条件的数的个数 Sample Input 5 19 22 Sample Output 1 HINT 100%     0<L<R<10^18 , n<=10^9 题解:真心喜欢这种搜索+DP的题~ 先预处理出f(x)所有可能的取值,…