hdu 5179 beautiful number(构造,,,,)
题意:
一个如果称作是漂亮数,当且仅当满足:
每一位上的数字是【1,9】,从高到时低数字大小降序,且有di%dj=0(i<j) 例:931
给一个区间【L,R】,问这个区间里有多少个漂亮数。
1≤L≤R≤109
思路:
漂亮数一看就很少。可以直接构造。
哎,,,用了DP+构造,写了好久。。。其实很简单的一个DFS构造就行了。
过些天补上代码。先贴冗长代码~
代码:
int T,L,R;
int wei;
int ans1,ans2,ans;
int d[15], w[15];
int dp[15][15]; int calc(int x){
int cn=0;
while(x){
x/=10;
++cn;
}
return cn;
} void dfs(int pos,bool state){
if(pos>wei){
++ans;
return;
}
if(pos==1){
if(state){
rep(i,1,d[pos]){
w[pos]=i;
dfs(pos+1,i==d[pos]);
}
}else{
rep(i,1,9){
w[pos]=i;
dfs(pos+1,state);
}
}
}else{
if(state){
rep(i,1,d[pos]){
if(w[pos-1]%i==0){
w[pos]=i;
dfs(pos+1,i==d[pos]);
}
}
}else{
rep(i,1,9){
if(w[pos-1]%i==0){
w[pos]=i;
dfs(pos+1,state);
}
}
}
}
} int main(){ cin>>T;
while(T--){
scanf("%d%d",&L,&R); L--;
int tempL=L;
wei=calc(L);
rep2(i,wei,1){
d[i]=(L%10);
L/=10;
}
ans=0;
if(tempL==0){
ans=0;
}else{
dfs(1,true);
}
ans1=ans; mem(dp,0);
rep(i,1,9) dp[1][i]=1;
rep(i,2,wei-1){
rep(j,1,9){
rep(k,1,9){
if(j%k==0){
dp[i][j]+=dp[i-1][k];
}
}
}
}
rep(i,1,wei-1){
rep(j,1,9) ans1+=dp[i][j];
} wei=calc(R);
rep2(i,wei,1){
d[i]=(R%10);
R/=10;
}
ans=0;
dfs(1,true);
ans2=ans; mem(dp,0);
rep(i,1,9) dp[1][i]=1;
rep(i,2,wei-1){
rep(j,1,9){
rep(k,1,9){
if(j%k==0){
dp[i][j]+=dp[i-1][k];
}
}
}
}
rep(i,1,wei-1){
rep(j,1,9) ans2+=dp[i][j];
} printf("%d\n",ans2-ans1);
} return 0;
}
hdu 5179 beautiful number(构造,,,,)的更多相关文章
- hdu 5179 beautiful number
beautiful number 问题描述 令 A = \sum_{i=1}^{n}a_i * {10}^{n-i}(1\leq a_i \leq 9)A=∑i=1nai∗10n−i ...
- HDU 5179 beautiful number (数位dp / 暴力打表 / dfs)
beautiful number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- hdu 5179 beautiful number(数位dp)
原题链接 题意:求[l,r]中高位%低位等于0的数字个数.(不含0)分析:此题有三种方法.1.暴搜,毕竟最多才10个位.2.数位dp,预处理好整体的,再处理细节. dp[i][j]表示第i位上的数字位 ...
- 【HDOJ】5179 beautiful number
DFS. /* 5179 */ #include <iostream> #include <algorithm> #include <map> #include & ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- hdu 2665 Kth number
划分树 /* HDU 2665 Kth number 划分树 */ #include<stdio.h> #include<iostream> #include<strin ...
- Codeforces 55D Beautiful Number
Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisibl ...
- hdu 4670 Cube number on a tree(点分治)
Cube number on a tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/ ...
随机推荐
- 洛谷P1090——合并果子(贪心)
https://www.luogu.org/problem/show?pid=1090 题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合 ...
- 个人作业--体温上报APP
第一阶段目标: 1.要求增加用户注册功能,用户注册信息包括用户ID(学号).用户名(姓名),手机号码,用户单位(班级),用户班级四项基本信息,用户第一次注册后,用户姓名不用每次输入 . 2.体温上报界 ...
- PHP的OpenSSL加密扩展学习(二):非对称加密
上篇文章,我们了解了关于对称和非对称加密的一些相关的理论知识,也学习了使用 OpenSSL 来进行对称加密的操作.今天,我们就更进一步,学习 OpenSSL 中的非对称加密是如何实现的. 生成私钥 通 ...
- PKI及SSL协议分析PKI及SSL协议分析
任务一:搭建CA服务器 本任务初步了解CA服务器的原理和配置过程.操作都在CA服务器上. 1.远程桌面方式登录到CA服务器,在CMD下查看本机IP地址: 2.安装证书服务 依次点击:"开始& ...
- javascript 对象池
* 一个对象池的简单应用 tool tip tootip.html <html> <head> <meta charset="UTF-8"> & ...
- iPhone发布内测程序的方法
iPhone是封闭系统,不像android手机可以自行安装apk,所以iPhone手机发布内测程序相对来说复杂一些. 越狱安装 如果测试用户的机器已经越狱,那就简单了,直接打包成ipa,用户直接通过9 ...
- Appium自动化测试时为什么要自己封装find方法
官方的find_element方法不能很好地处理异常,所以自行封装,以智能化处理各种异常
- Fiddler抓包(以谷歌浏览器、安卓手机为例)
fiddler抓包流程与whistle相同,所以本章内容会相对简洁.如果需要详细说明,可参考whistle抓包. 这里以谷歌浏览器.安卓手机为例. 1.fiddler安装 下载安装包,默认安装. 2. ...
- 『PyTorch』矩阵乘法总结
1. 二维矩阵乘法 torch.mm() torch.mm(mat1, mat2, out=None),其中mat1(\(n\times m\)),mat2(\(m\times d\)),输出out的 ...
- AOJ/搜索与递归及分治法习题集
ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...