#数位dp#poj 3208 Apocalypse Someday
题目
定义一种神奇的数当且仅当数位上至少有3个6,问第n个神奇的数是多少
分析
那么可以预处理出由i位数字构成的魔鬼/非魔鬼数,
f[i][0]=9∗(f[i−1][0]+f[i−1][1]+f[i−1][2])f[i][0]=9*(f[i-1][0]+f[i-1][1]+f[i-1][2])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][1]=f[i-1][0],f[i,2]=f[i-1][1]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]=f[i-1][2]+10*f[i-1][3]f[i][3]=f[i−1][2]+10∗f[i−1][3]
然后用试填法,求出答案
代码
#include <cstdio>
long long f[21][4];
int max(int a,int b){return a>b?a:b;}
int main(){f[0][0]=1;for (int i=0;i<20;i++){for (int j=0;j<3;j++)//动态规划f[i+1][j+1]+=f[i][j],f[i+1][0]+=f[i][j]*9;f[i+1][3]+=f[i][3]*10;}int t; scanf("%d",&t);while (t--){int n,m; scanf("%d",&n);for (m=3;f[m][3]<n;m++);//找到应该的位数for (int i=m,k=0;i;i--){for (int j=0;j<=9;j++){long long cnt=f[i-1][3];if (j==6||k==3)for (int l=max(3-k-(j==6),0);l<3;l++) cnt+=f[i-1][l];//可能性if (cnt<n) n-=cnt;//还没有求到else {if (k<3) if (j==6) k++; else k=0;putchar(j+48);//找到答案break;}}}putchar('\n');}return 0;
}
#数位dp#poj 3208 Apocalypse Someday相关推荐
- poj 3208 Apocalypse Someday 数位dp+二分答案
Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2203 Accepted: 11 ...
- poj 3208 Apocalypse Someday(数位dp)
题意:给定n,输出第n大包含666的数字. 分析:数位dp,详见<算法竞赛进阶指南>P342-344. 代码: #include<iostream> #include<c ...
- Poj 3208 Apocalypse Someday(数位dp + 二分)
题目大意: 有三个连续的6在一起的数就是beast数,前几个beast数是:666,1666,2666,- T组数据,每组询问排名为n的beast的数是什么? 解题思路 第一眼看到懵逼了,不是 ...
- 数位DP———POJ 3208 启示录
POJ3208 启示录 题目传送门 题目大意:我们称只要某数字的十进制表示中有三个连续的6,我们就称它为"魔鬼数",比如:666,1666,6663,16666 等.现给出一个数X ...
- POJ 3208 Apocalypse Someday
HyperlinkHyperlinkHyperlink http://poj.org/problem?id=3208 DescriptionDescriptionDescription 定义包含三个连 ...
- 解题报告 (十四) 数位DP
文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...
- poj3208 Apocalypse Someday (数位dp + 二分)
The number 666 is considered to be the occult "number of the beast" and is a well used num ...
- POJ 3252 数位DP
链接: http://poj.org/problem?id=3252 题意: 给你一个区间l,r,求区间中有多少个数转化为二进制后1的个数大于等于0的个数 题解: 还是数位dp,不过多了前导0的判断 ...
- 【poj3208-Apocalypse Someday】数位DP
题意:问你在所有包含666的数中,第n大的是多少.(1 ≤ n ≤ 50,000,000) .开头几个是666, 1666, 2666, 3666, 4666, 5666- 题解: 这题可以用AC自动 ...
最新文章
- 独家 | 每个数据科学家应该知道的五种检测异常值的方法(附Python代码)
- java中pc寄存器的作用是什么_既然有PC寄存器,栈帧里的返回地址的作用是什么?...
- [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
- 一周一论文(翻译 总结)— [SOCC 13] jVerbs Ultra-Low Latency for Data Center Applications 在JVM虚拟机上构建RDMA的verbs操作
- LeetCode 559. N叉树的最大深度
- linux服务器查看系统装到哪个盘,查看linux安装了什么服务器地址
- 在Ubuntu 16.04 使用命令行安装Nvidia CUDA-9.0以及cudnn7
- gg product
- python爬虫必看书籍推荐
- 类似QQ表情的控件 EmotionContainer(原创)
- android 仿QQ相册
- that、this、these、those的区别
- sci-hub, libgen等科研用文献书籍下载
- Spark独到见解--Transformation算子总结
- html文件 加壳,CDHtmlDialog加壳HTML5页面跳转错误解决(原)
- css中字体之间的距离是什么意思,css字符间距(css文字间距怎么设置)
- java/php/net/python驾校学员管理系统设计
- VMDNAMD命令规则(转载)
- 洛谷P1478 陶陶摘苹果(升级版)视频题解
- 共祖系数、相关系数和近交系数
热门文章
- AUTOSAR架构学习之EcuM
- go学习 --- 家庭收支管理系统
- 语音卡开发系列: LightweightCTI架构设计(作者:东成西就)
- SVN服务端常用命令
- ArcGIS10.3+Server实现BS架构的车辆监控系统
- Oracle的SQL中常用时间相关缩写对应表总结
- 手动正则验证手机号码格式
- 解决Aucc2021在win10/11系统上安装失败问题Audition 2021中文完整版_永久使用安装教程
- 华为鸿蒙hicar演示,华为智能座舱的野心:HiCar上车,为鸿蒙OS铺路
- 02 MySQL优化 - 优化SQL语句