数位DP CF 55D Beautiful numbers
题目链接
题意:定义"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相关推荐
- CF 55D Beautiful numbers 数位DP
思路: 要找一个数能被他的所有反的数字整除,只需求出这个数能被其数字的LCM整除.而LCM最大为5*7*8*9=2520: 如果直接开dp[20][2520][2520]会超内存,而2^3,3^2,5 ...
- Codeforces 55D Beautiful numbers (数位DP)
题意:有T组询问,每次询问区间[l, r]中的beautiful number有多少.beautiful number是指这个数可以被组成它的数字整除.例如15是beautiful number,因为 ...
- 找规律/数位DP HDOJ 4722 Good Numbers
题目传送门 1 /* 2 找规律/数位DP:我做的时候差一点做出来了,只是不知道最后的 is_one () 3 http://www.cnblogs.com/crazyapple/p/3315436. ...
- [数位dp] spoj 10738 Ra-One Numbers
题意:给定x.y.为[x,y]之间有多少个数的偶数位和减去奇数位和等于一. 个位是第一位. 样例: 10=1-0=1 所以10是这种数 思路:数位dp[i][sum][ok] i位和为sum 是否含有 ...
- CodeForces - 55D Beautiful numbers
题目链接:http://codeforces.com/problemset/problem/55/D 题意:求区间[L,R]有多少个Beautiful numbers.Beautiful number ...
- Codeforces Beta Round #51 D. Beautiful numbers 数位dp + 状态优化
传送门 文章目录 题意: 思路: 题意: 思路: 数位dpdpdp挺经典的一个题辣,有一个很明显的状态就是f[pos][num][lcm]f[pos][num][lcm]f[pos][num][lcm ...
- The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)
题意:求小于等于N且能被自己所有位上数之和整除的数的个数. 分析:裸的数位dp.用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数.这里mo ...
- Educational Codeforces Round 8 D. Magic Numbers 数位DP
D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...
- CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)
题目链接:点击查看 题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少 题目分析:自己写的贪心太丑了,就不放上来丢人 ...
最新文章
- 【错误记录】jar 执行错误 ( java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 )
- Typora 开始收费, 不妨试试这个开源免费的MD编辑器
- centos重置系统_双系统下Linux系统无法启动及其引导丢失之解决
- Palm应用开发之四Palm 应用模型
- 在OOW2009上寻宝撞大运续(床上篇)
- enum和enum class
- PAT (Advanced Level) 1038. Recover the Smallest Number (30)
- 教你如何制作饼干icon教程
- oracle重建orainventory,数据库重建oraInventory
- jQuery 版本viewer.js插件的结构分析与学习
- spring boot shiro redis整合基于角色和权限的安全管理-Java编程
- 找规律 SGU 107 987654321 problem
- OpenJDK8编码代码三合一:x86/Arm/Mips
- GoLang基础知识(1)
- IdPop3 出现 Max line length exceeded.的解决方法
- 计算机网络嗅探实验,网络嗅探与欺骗实验
- 会玩计算机游戏英语,英语口语表达:他整天就只会玩计算机游戏
- 手机怎么把几个PDF文件合并到一起?教你一分钟搞定
- selenium webdriver使用
- Domain-Adversarial Training of Neural Networks