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/ ...
随机推荐
- java中链表和数组的区别?
综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...
- python学习笔记(四)-文件操作
文件读写"""一.文件打开有3种方式 1.读 r #如果打开的文件的时候没有指定模式,那么默认是读 读写模式 r+,只要沾上r,文件不存在的时候,打开都会报错 2.写 w ...
- windows2012安装django
第一步:下载python3.6.8或者到(https://www.python.org/downloads/release/python-368/)官网下载(Windows x86-64 execut ...
- 用 openresty 编写 lua
""" #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...
- Kronecker product
Kronecker product 的基本运算 结合律 \begin{equation} \mathrm{A} \otimes (\mathrm{B + C}) = \mathrm{A} \otime ...
- vue+element实现省区市三级联动以及详细地址的输入
Vue+elementui实现省区市三级联动+详细地址的输入 详细需求,需要手动更改用户所在的地址. 安装依赖项 npm install element-china-area-data -S 在组建中 ...
- 实现线程按顺序输出ABC
线程按顺序输出ABC 实现描述:建立三个线程A.B.C,分别按照顺序输出十次ABC 首先建立一个方法,按照条件进行输出 class PrintABC{ private int index=0; pub ...
- Node.js Koa框架学习笔记
Koa 基本介绍 Koa是Node.js中非常出名的一款WEB框架,其特点是短小精悍性能强. 它由Express原版人马打造,同时也是Egg框架的设计蓝图,可以说Koa框架的学习性价比是非常高的. 官 ...
- 利用OpenCV存储一段视频中的每一帧
// vfc.cpp : 定义控制台应用程序的入口点.#include "stdafx.h"#include <opencv2/highgui/highgui.hpp> ...
- pymysql基础
一,基本使用 倒入模块 import pymysql conn=pymysql.connect( host="数据库地址,本机是localhost,别的机器是ip", user=& ...