题目

定义一种神奇的数当且仅当数位上至少有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相关推荐

  1. poj 3208 Apocalypse Someday 数位dp+二分答案

    Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 2203   Accepted: 11 ...

  2. poj 3208 Apocalypse Someday(数位dp)

    题意:给定n,输出第n大包含666的数字. 分析:数位dp,详见<算法竞赛进阶指南>P342-344. 代码: #include<iostream> #include<c ...

  3. Poj 3208 Apocalypse Someday(数位dp + 二分)

    题目大意:   有三个连续的6在一起的数就是beast数,前几个beast数是:666,1666,2666,-   T组数据,每组询问排名为n的beast的数是什么? 解题思路 第一眼看到懵逼了,不是 ...

  4. 数位DP———POJ 3208 启示录

    POJ3208 启示录 题目传送门 题目大意:我们称只要某数字的十进制表示中有三个连续的6,我们就称它为"魔鬼数",比如:666,1666,6663,16666 等.现给出一个数X ...

  5. POJ 3208 Apocalypse Someday

    HyperlinkHyperlinkHyperlink http://poj.org/problem?id=3208 DescriptionDescriptionDescription 定义包含三个连 ...

  6. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  7. poj3208 Apocalypse Someday (数位dp + 二分)

    The number 666 is considered to be the occult "number of the beast" and is a well used num ...

  8. POJ 3252 数位DP

    链接: http://poj.org/problem?id=3252 题意: 给你一个区间l,r,求区间中有多少个数转化为二进制后1的个数大于等于0的个数 题解: 还是数位dp,不过多了前导0的判断 ...

  9. 【poj3208-Apocalypse Someday】数位DP

    题意:问你在所有包含666的数中,第n大的是多少.(1 ≤ n ≤ 50,000,000) .开头几个是666, 1666, 2666, 3666, 4666, 5666- 题解: 这题可以用AC自动 ...

最新文章

  1. 独家 | 每个数据科学家应该知道的五种检测异常值的方法(附Python代码)
  2. java中pc寄存器的作用是什么_既然有PC寄存器,栈帧里的返回地址的作用是什么?...
  3. [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
  4. 一周一论文(翻译 总结)— [SOCC 13] jVerbs Ultra-Low Latency for Data Center Applications 在JVM虚拟机上构建RDMA的verbs操作
  5. LeetCode 559. N叉树的最大深度
  6. linux服务器查看系统装到哪个盘,查看linux安装了什么服务器地址
  7. 在Ubuntu 16.04 使用命令行安装Nvidia CUDA-9.0以及cudnn7
  8. gg product
  9. python爬虫必看书籍推荐
  10. 类似QQ表情的控件 EmotionContainer(原创)
  11. android 仿QQ相册
  12. that、this、these、those的区别
  13. sci-hub, libgen等科研用文献书籍下载
  14. Spark独到见解--Transformation算子总结
  15. html文件 加壳,CDHtmlDialog加壳HTML5页面跳转错误解决(原)
  16. css中字体之间的距离是什么意思,css字符间距(css文字间距怎么设置)
  17. java/php/net/python驾校学员管理系统设计
  18. VMDNAMD命令规则(转载)
  19. 洛谷P1478 陶陶摘苹果(升级版)视频题解
  20. 共祖系数、相关系数和近交系数

热门文章

  1. AUTOSAR架构学习之EcuM
  2. go学习 --- 家庭收支管理系统
  3. 语音卡开发系列: LightweightCTI架构设计(作者:东成西就)
  4. SVN服务端常用命令
  5. ArcGIS10.3+Server实现BS架构的车辆监控系统
  6. Oracle的SQL中常用时间相关缩写对应表总结
  7. 手动正则验证手机号码格式
  8. 解决Aucc2021在win10/11系统上安装失败问题Audition 2021中文完整版_永久使用安装教程
  9. 华为鸿蒙hicar演示,华为智能座舱的野心:HiCar上车,为鸿蒙OS铺路
  10. 02 MySQL优化 - 优化SQL语句