$Poj3208$ 启示录 数位统计$DP$
Description


Sol
这题长得就比较像数位$DP$叭.
所以先用$DP$进行预处理,再基于拼凑思想,通过"试填法"求出最终的答案.
设$F[i][3]$表示由$i$位数字构成的魔鬼数有多少个,$F[i][j](0<=j<=2)$表示由$i$位数字组成的,开头有$j$个$6$的非魔鬼数有多少个.注意,在计算$F[i][j]$时允许前导$0$的存在
$F[i][0]=9*(F[i-1][0]+F[i-1][1]+F[i-1][2])$
$F[i][1]=F[i-1][0]$
$F[i][2]=F[i-1][1]$
$F[i][3]=F[i-1][2]+10*F[i-1][3]$
预处理完成之后,我们先通过$F[i][3]$确定第$X$小魔鬼数的位数,然后从左到右进行试填,试填的数从小到大枚举
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#define Rg register
#define il inline
#define db double
#define ll long long
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
#define yes(i,a,b) for(Rg int i=a;i>=b;i--)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int T,n,d,k;
ll f[][];
il void init()
{
f[][]=;
go(i,,)
{
f[i][]=*(f[i-][]+f[i-][]+f[i-][]);
f[i][]=f[i-][];
f[i][]=f[i-][];
f[i][]=f[i-][]+*f[i-][];
}
}
int main()
{
init();T=read();
while(T--)
{
n=read();d=;k=;
while(f[d][]<n)d++;
yes(i,d,)
{
go(j,,)
{
//求若第i位为j,那么剩下i-1位有多少种填法能使这个数成为魔鬼数
ll ct=f[i-][];
if(j== || k>=)
go(t,max(,-k-(j==)),)ct+=f[i-][t];
if(ct<n)n-=ct;//应该填一个更大的数
else //就填j
{
if(j==)k++;else if(k<)k=;
printf("%d",j);break;
}
}
}
printf("\n");
}
return ;
}
随机推荐
- Python类型模块:types
types模块中定义了Python中所有的类型,包括NoneType, TypeType, IntType, FloatType, BooleanType, BufferType, Bui ...
- 错误处理——According to TLD or attribute directive in tag file, attribute test does not accept any expres
应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute valu ...
- Docker 领衔 OpenSource.com 2014十佳开源软件排行榜
Docker 领衔 OpenSource.com 2014十佳开源软件排行榜 每年 Opensource.com 都会收集最佳的十个开源软件,今年也不例外,废话不多说,直接进入主题. Docker 应 ...
- hdu 2410 Barbara Bennett's Wild Numbers
Problem - 2410 挺好玩的一道题目.这道题的意思是给出一个模糊值以及一个确定值,要求求出模糊值中大于确定值的个数有多少. 这题我是直接用dfs的方法搜索的,对于每一位如果之前位置的形成的数 ...
- oracle comment on的用法
转:http://www.2cto.com/database/201109/106249.html oracle中用comment on命令给表或字段加以说明,语法如下:COMMENT ON { ...
- call,apply,bind详解
为什么要改变this指向? 我们知道bind,call,apply的作用都是用来改变this指向的,那为什么要改变this指向呢?请看下面的例子: var name="lucy"; ...
- div+css布局的好处
改版的时候更方便,只需改动CSS文件 页面加载速度更快,结构清晰,页面简洁 表现与结构相分离 有利于SEO,排名更靠前
- NLP进阶之(七)膨胀卷积神经网络
NLP进阶之(七)膨胀卷积神经网络1. Dilated Convolutions 膨胀卷积神经网络1.2 动态理解1.2.2 转置卷积动画1.2.3 理解2. Dilated Convolutions ...
- H3C PPP MP简介
- Python数据可视化matplotlib和seaborn
Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用.接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分.在Pytho ...