题目链接

题意:定义"beautiful number"为一个数n能整除所有数位上非0的数字

分析:即n是数位所有数字的最小公倍数的倍数。LCM(1到9)=2520。n满足是2520的约数的倍数。dp[len][val][lcm]一维为数的位数,一维为%2520的值(保存原数不可能,也没必要,2520是可行的最小公倍数最大的一个),一维为当前数位的lcm,判断满足的条件是val%lcm==0。这题离散化2520的约数,否则空间开不下。

#include <bits/stdc++.h>typedef long long ll;
ll dp[20][2520][50];
int digit[20];
int id[2521];
int tot;int GCD(int a, int b) {return b ? GCD (b, a % b) : a;
}
int LCM(int a, int b) {return a / GCD (a, b) * b;
}void init_LCM() {tot = 0;for (int i=1; i<=2520; ++i) {if (2520 % i == 0) {id[i] = ++tot;}}
}ll DFS(int pos, int val, int lcm, bool limit) {if (pos == -1) {return val % lcm == 0;}ll &now = dp[pos][val][id[lcm]];if (!limit && now != -1) {return now;}int d = limit ? digit[pos] : 9;ll ret = 0;for (int i=0; i<=d; ++i) {int tval = (val * 10 + i) % 2520;int tlcm = i ? lcm / GCD (lcm, i) * i : lcm;ret += DFS (pos - 1, tval, tlcm, limit && i == d);}if (!limit) {now = ret;}return ret;
}ll solve(ll x) {int len = 0;if (x == 0) {digit[len++] = 0;} else {while (x) {digit[len++] = x % 10;x /= 10;}}return DFS (len - 1, 0, 1, true);
}int main() {init_LCM ();memset (dp, -1, sizeof (dp));int T; scanf ("%d", &T);while (T--) {ll l, r; std::cin >> l >> r;std::cout << solve (r) - solve (l - 1) << '\n';}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/5476984.html

数位DP CF 55D Beautiful numbers相关推荐

  1. CF 55D Beautiful numbers 数位DP

    思路: 要找一个数能被他的所有反的数字整除,只需求出这个数能被其数字的LCM整除.而LCM最大为5*7*8*9=2520: 如果直接开dp[20][2520][2520]会超内存,而2^3,3^2,5 ...

  2. Codeforces 55D Beautiful numbers (数位DP)

    题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少.beautiful number是指这个数可以被组成它的数字整除.例如15是beautiful number,因为 ...

  3. 找规律/数位DP HDOJ 4722 Good Numbers

    题目传送门 1 /* 2 找规律/数位DP:我做的时候差一点做出来了,只是不知道最后的 is_one () 3 http://www.cnblogs.com/crazyapple/p/3315436. ...

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

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

  5. CodeForces - 55D Beautiful numbers

    题目链接:http://codeforces.com/problemset/problem/55/D 题意:求区间[L,R]有多少个Beautiful numbers.Beautiful number ...

  6. Codeforces Beta Round #51 D. Beautiful numbers 数位dp + 状态优化

    传送门 文章目录 题意: 思路: 题意: 思路: 数位dpdpdp挺经典的一个题辣,有一个很明显的状态就是f[pos][num][lcm]f[pos][num][lcm]f[pos][num][lcm ...

  7. The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)

    题意:求小于等于N且能被自己所有位上数之和整除的数的个数. 分析:裸的数位dp.用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数.这里mo ...

  8. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  9. CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)

    题目链接:点击查看 题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少 题目分析:自己写的贪心太丑了,就不放上来丢人 ...

最新文章

  1. 【错误记录】jar 执行错误 ( java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 )
  2. Typora 开始收费, 不妨试试这个开源免费的MD编辑器
  3. centos重置系统_双系统下Linux系统无法启动及其引导丢失之解决
  4. Palm应用开发之四Palm 应用模型
  5. 在OOW2009上寻宝撞大运续(床上篇)
  6. enum和enum class
  7. PAT (Advanced Level) 1038. Recover the Smallest Number (30)
  8. 教你如何制作饼干icon教程
  9. oracle重建orainventory,数据库重建oraInventory
  10. jQuery 版本viewer.js插件的结构分析与学习
  11. spring boot shiro redis整合基于角色和权限的安全管理-Java编程
  12. 找规律 SGU 107 987654321 problem
  13. OpenJDK8编码代码三合一:x86/Arm/Mips
  14. GoLang基础知识(1)
  15. IdPop3 出现 Max line length exceeded.的解决方法
  16. 计算机网络嗅探实验,网络嗅探与欺骗实验
  17. 会玩计算机游戏英语,英语口语表达:他整天就只会玩计算机游戏
  18. 手机怎么把几个PDF文件合并到一起?教你一分钟搞定
  19. selenium webdriver使用
  20. Domain-Adversarial Training of Neural Networks

热门文章

  1. Windows 8.1 build 9369 简单安装测试了一下
  2. 黑马程序员-JavaSE核心知识-03第一个Java程序
  3. Table还是CSS,请您说说您的见解
  4. 严重红色警告-虾子+维C=砒霜
  5. java线程之线程通信控制
  6. apk静态注射[转]-未实践
  7. 为别人做嫁衣——代理模式
  8. 如何获取网站icon
  9. 使用纯css做的按钮
  10. C Primer Plus(第六版):C语言概述