BZOJ-1833(数位DP)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b;
int k[20];
ll dp[20][10];
ll sum[20];
ll ddfs(int pos,int lead,bool limit){
if(pos == -1)return 1;
if(!limit && !lead && sum[pos])return sum[pos];
int up = limit ? k[pos]:9;
ll res = 0;
for(int i=0;i<=up;i++){
res += ddfs(pos-1,lead && i==0,limit && i == k[pos]);
}
if(!limit && !lead)sum[pos] = res;
return res;
}
ll dfs(int pos,int x,bool lead,bool limit){
if(pos == -1)return lead;
if(!limit && !lead && dp[pos][x])return dp[pos][x];
int up = limit ? k[pos] : 9;
ll res = 0;
for(int i=0;i<=up;i++){
if(lead){
if(i == 0){
res += dfs(pos-1,x,lead,false);continue;
}
}
if(i == x){
res += ddfs(pos-1,false,limit && i == k[pos]);
res += dfs(pos-1,x,false,limit && i == k[pos]);
}
else res += dfs(pos-1,x,false,limit && i == k[pos]);
}
if(!limit && !lead)dp[pos][x] = res;
return res;
}
ll solve(ll x,int z){
int pos = 0;
while(x){
k[pos++] = x%10;
x/=10;
}
return dfs(pos-1,z,true,true);
}
int main(){
scanf("%lld%lld",&a,&b);
for(int i=0;i<=9;i++){
printf("%lld ",solve(b,i) - solve(a-1,i));
}
//printf("%lld\n",dp[0][1]);
puts("");
return 0;
}
BZOJ-1833(数位DP)的更多相关文章
- bzoj 1833 数位dp
很裸的数位dp. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defi ...
- bzoj 3668 数位DP
收获: 1.如果有很多位操作,并且不包含+-×/等高级运算,那么可以一位一位考虑,如果求一个最优解,可以尝试逐位确定,这道题因为原始攻击值有范围,那么就需要数位DP. /*************** ...
- bzoj 3209 数位DP+欧拉定理
枚举1的个数,统计有那么多1的数的个数 /************************************************************** Problem: 3209 Us ...
- BZOJ - 1026 数位DP
中文题面,注意st是不可以放到dp里面的,否则每次solve都要清零 注意状态的转移要st&&i==0,因为子结构也可能是st(当高位取0时) 而st是必然合法的 #include&l ...
- BZOJ 3679 数位DP
思路: f[i][j]表示i位数乘积为j的方案数 j的取值最多5000多种,那就开个map存一下好了 f[i][mp[k*rec[j]]]+=f[i-1][j]; //By SiriusRen #in ...
- BZOJ 3209 数位DP
思路: 先预处理出来组合数 按位做 枚举sum[x]是多少 注意Mod不是一个质数 //By SiriusRen #include <cstdio> using namespace std ...
- [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...
- BZOJ 1833 数字计数 数位DP
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...
- 【BZOJ】1833: [ZJOI2010] count 数字计数(数位dp)
题目 传送门:QWQ 分析 蒟蒻不会数位dp,又是现学的 用$ dp[i][j][k] $ 表示表示长度为i开头j的所有数字中k的个数 然后预处理出这个数组,再计算答案 代码 #include < ...
- bzoj 1833: [ZJOI2010]count 数字计数【数位dp】
非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...
随机推荐
- transition动画最简使用方式
HTML <a href="#" title="">test</a> CSS a {display:block; width:200px ...
- php输出变量加{}的作用
之前在输出字符串中有变量如 echo “中间有”; echo $i; echo "变量"; 现在发现一个好方法,把变量用{}括起来 echo "中间有{$i}变量&quo ...
- php根据出生日期获取年龄
/** * @param $birthday 出生年月日(1992-1-3) * @return string 年龄 */ function countage($birthday){ $year=da ...
- Java - 一道关于整型和字符类型相加的题目
题目 public class Test { public static void main(final String[] args) { final int a = 10; final int b ...
- 安卓H5软键盘遮挡输入框
由于安卓app内嵌入H5页面,webview对于软键盘没有处理(如果不是产品强烈要求建议不要处理这种拆东墙补西墙的问题,因为其他的手机上可能会出现已经优化软键盘的情况) 1.input下方还有多余空位 ...
- 写TXT文件
#region 写日志 private static void writelog(string strwrite) { string strPath = "d:/log.txt"; ...
- 使用Robot类模拟鼠标、键盘事件
Robot类用于模拟鼠标.键盘事件,生成本机系统输入事件.Robot 的主要用于自动化.自运行的程序和其他需要自动控制鼠标和键盘的程序 相当于实际操作的效果,不仅仅只是生成对应的鼠标.键盘事件.比如R ...
- zuul忽略表达式
如果有error过滤器,会进入error
- 基于TypeScript从零重构axios
一.在GitHub上创建一个代码仓库 找到仓库地址:git@github.com:QianDingweiCharles/ts-axios.git 二.项目配置 本地新建一个文件夹axios 用VSco ...
- Kendo MVVM 数据绑定(四) Disabled/Enabled
Kendo MVVM 数据绑定(四) Disabled/Enabled Disabled 和 Enabled 绑定可以根据 ViewModel 的某个属性值的 true,false 来设置 DOM 元 ...