给定n∈[1,1e12],求1到n的所有整数中,各位数字之和能整除它本身的数的个数。

这道题与UVA-11361类似,假如设dp[u][lim][m1][m2]为枚举到第u位(从低到高数),是否受限,各位之和为m1,本身为m2时继续往下枚举能得到的答案数,可以得到正确的答案。但m2过大不能直接作为状态保存,如果对各位之和取模的话,又会发现dp的过程中模数是不确定的,怎么办?

解决方法是枚举模数,也就是枚举各位之和k,这样模数就固定了,就可以轻松地往下转移了。边界条件为u<0&&m1==k&&m2==0,状态转移方程见代码。

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4 typedef long long ll;
 5 const ll N=12+2;
 6 ll bit[N],nb,d[N][2][130][130],a,b,k;
 7 ll dp(ll u,ll lim,ll m1,ll m2) {
 8     if(u<0) {
 9         if(m1==k&&m2==0)return 1;
10         return 0;
11     }
12     ll& ret=d[u][lim][m1][m2];
13     if(~ret)return ret;
14     ret=0;
15     for(ll i=0; i<=(lim?bit[u]:9); ++i)ret+=dp(u-1,lim&&i==bit[u],m1+i,(m2*10+i)%k);
16     return ret;
17 }
18
19 ll getans(ll x) {
20     ll ans=0;
21     for(nb=0; x; x/=10)bit[nb++]=x%10;
22     for(k=1; k<=120; ++k) {
23         memset(d,-1,sizeof d);
24         ans+=dp(nb-1,1,0,0);
25     }
26     return ans;
27 }
28
29 int main() {
30     freopen("just.in","r",stdin);
31     freopen("just.out","w",stdout);
32     ll n;
33     scanf("%lld",&n);
34     printf("%lld\n",getans(n));
35     return 0;
36 }

转载于:https://www.cnblogs.com/asdfsag/p/10350635.html

Gym - 100623J Just Too Lucky (数位dp)相关推荐

  1. 数位DP 不断学习中。。。。

    1, HDU 2089  不要62 :http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:不能出现4,或者相邻的62, dp[i][0],表示不存在不吉 ...

  2. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  3. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  4. 不要62 ---数位DP

    题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...

  5. bzoj 3598 [ Scoi 2014 ] 方伯伯的商场之旅 ——数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 数位DP...东看西看:http://www.cnblogs.com/Artanis/ ...

  6. cojs 简单的数位DP 题解报告

    首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...

  7. [数位dp] spoj 10738 Ra-One Numbers

    题意:给定x.y.为[x,y]之间有多少个数的偶数位和减去奇数位和等于一. 个位是第一位. 样例: 10=1-0=1 所以10是这种数 思路:数位dp[i][sum][ok] i位和为sum 是否含有 ...

  8. 数位dp(求1-n中数字1出现的个数)

    题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...

  9. 数位dp ---- 2020 icpc 上海 Sum of Log(枚举高位的二进制数位dp)

    题目链接 题目大意 : 解题思路: 这里有个很核心的地方就是log2(i+j)\text{log2(i+j)}log2(i+j)本质上就是看看i+j\text{i+j}i+j的二进制高位在哪里? 那么 ...

  10. 数位dp ---- 暴力 + 二进制的数位dp 2020济南 L Bit Sequence

    题目链接 题目大意 f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数 给你一个数组[a1,a2,a3...,am]m∈[1,100][a_1,a_2,a_3. ...

最新文章

  1. 把一些11年老博客上的文章转移过来了
  2. CSS3弹性盒模型之box-orient box-direction
  3. html中某个名称不能修改,解决type=file 文件修改表单 名称不能正常回显的问题
  4. 互联网巨头们的「中台战事」
  5. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用...
  6. iOS Cookie学习(NSHTTPCookieStorage的使用)
  7. Shell and powershell
  8. dotNET Core 中怎样操作 AD?
  9. php实现把es6转为es5,如何将ES6代码转化为ES5?
  10. OpenStack组件——Keystone身份认证
  11. form表单 vue 拖拽_vue实现可视化可拖放的自定义表单(代码示例)
  12. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?
  13. 度度熊的01世界 DFS
  14. web表格在css中属性,CSS属性之表格(Table)_html/css_WEB-ITnose
  15. openstack changePassword
  16. JavaScript从父页面获取子页面的值(子页面又如何访问父页面)
  17. 手写仿淘宝商城页面(html+css+部分js)
  18. 《工科泛函分析基础》预习笔记 证明:可测集上的连续函数都是可测函数
  19. PPT怎么母版怎么修改及应用
  20. 京东商品列表API接口-(item_search-按关键字搜索京东商品API接口),京东API接口

热门文章

  1. 拓端tecdat|拟合R语言中的多项式回归
  2. (4)回归决策树_预测波士顿房价
  3. springboot学习笔记03 整合JPA
  4. JSP教程第5讲笔记
  5. 基于队列的二叉树层次遍历
  6. 【NumPy基础】100道numpy练习——Apprentice篇
  7. tensorflow2.0内存溢出解决办法
  8. python基于给定时间戳生成 未来/过去 前进/倒退 n个小时的时间戳
  9. 学习python内一般函数知识
  10. 常熟计算机专业工资多少,常熟学计算机,常熟学计算机哪里好,常熟学计算机一般工资能拿多少 - IT教育频道...