正题

题目链接:http://poj.org/problem?id=3208


题目大意

求第X个有3个连续的6的数。


解题思路

用fi,j(j<3)fi,j(j<3)f_{i,j}(j表示i位,已经有j个6的方案总数。然后fi,3fi,3f_{i,3}表示i位的魔鬼数的总数。
然后动态转移方程。

fi,0=9∗(fi−1,0+fi−1,1+fi−1,2)fi,0=9∗(fi−1,0+fi−1,1+fi−1,2)

f_{i,0}=9*(f_{i-1,0}+f_{i-1,1}+f_{i-1,2})
只要一个不是6的数就能间断他们

fi,1=fi−1,0fi,1=fi−1,0

f_{i,1}=f_{i-1,0}

fi,2=fi−1,1fi,2=fi−1,1

f_{i,2}=f_{i-1,1}
加一个6

fi,3=fi−1,2+10∗fi−1,3fi,3=fi−1,2+10∗fi−1,3

f_{i,3}=f_{i-1,2}+10*f_{i-1,3}
上一位加任意一个数或两个六的情况下加一个6。
然后试填就好了


code

#include<cstdio>
#include<algorithm>
using namespace std;
long long f[21][4];
int t,n,m;
int main()
{f[0][0]=1;for(int i=1;i<=20;i++){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];}//dpscanf("%d",&t);for(int ti=1;ti<=t;ti++){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++)//填入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)//位数不足3时特判特殊判断{k+=(j==6);k*=(j==6);}printf("%d",j);//输出break;//填完了}   }}printf("\n");}
}

POJ3208-Apocalypse Someday【数位dp】相关推荐

  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 + 二分)

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

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

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

  4. POJ-3208 Apocalypse Someday (数位DP)

    只要某数字的十进制表示中有三个6相邻,则该数字为魔鬼数,求第X小的魔鬼数\(X\le 5e7\) 这一类题目可以先用DP进行预处理,再基于拼凑思想,用"试填法"求出最终的答案 \( ...

  5. 数位DP POJ3208 Apocalypse Someday

    题目大意 求第X个有3个连续的6的数. 解题思路 #include<iostream> #include<algorithm> using namespace std; int ...

  6. POJ3208:Apocalypse Someday

    题目描述 The number 666 is considered to be the occult "number of the beast" and is a well use ...

  7. poj3208 Apocalypse Someday

    Description The number 666 is considered to be the occult "number of the beast" and is a w ...

  8. poj3208 Apocalypse Someday 题解报告

    题目传送门 [题目大意] 包含连续的至少三个6的数称为"beastly number",将这些数从小到大排序,求第n个数. [思路分析] (注:以下加粗的"数" ...

  9. 数位dp真·浅谈 By cellur925

    预警:由于是从$Vergil$学长那里和$Mathison$大神那里学来的,所以清一色记忆化搜索!qwq 巨佬的数位dp讲解(未来的咕咕日报头条): https://www.luogu.org/blo ...

  10. poj 3208 Apocalypse Someday(数位dp)

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

最新文章

  1. 杭电 1272 poj 1308 小希的迷宫
  2. python网课一般多少钱-Python培训网课一般学费多少?毕业生能承担吗?
  3. 北京理工大学信息安全与对抗竞赛----crackme02分析
  4. 网络服务器预防dos***的层次
  5. java面试题十四 基本类型的默认值
  6. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景
  7. ylbtech-Model-Account(通用账户模块设计)
  8. python转义引号的作用_python传到前端的数据,双引号被转义的问题
  9. 如何创建链接的服务器
  10. 带绿色箭头指示的滑动门DIV效果
  11. ios找不到信任证书_iOS 11 中可用的受信任根证书列表
  12. php数组的 需要注意的
  13. springmvc集成shiro例子
  14. work-conserving scheduling 是什么
  15. java operator 重载 ==_运算符重载
  16. ZynAddSubFX
  17. 读书笔记:《Being Mortal》
  18. 2022最新换换回收苹果手机回收价格表(苹果手机回收哪个平台价格高)
  19. SSRS 2008 冻结首行
  20. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 E-小Y吃苹果

热门文章

  1. java new 面试_java面试30问
  2. 对MATLAB课程教程的建议,关于MATLAB课程教学的几点探讨
  3. python网络运维案例代码库_OLDboy-python第八期运维教程
  4. linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...
  5. jenkins换服务器找不到包,服务器重启后Jenkins项目部分丢失问题解决方法
  6. 各纬度气候分布图_欧洲气候特征:以温带气候类型为主,是海洋性气候最显著的大洲...
  7. PAT乙级题目——1002写出这个数
  8. [C++11]智能指针简单介绍
  9. 计算机公共基础知识实验报告,20140902413 李雪瑞 计算机工程系实验报告345.docx...
  10. python标准库time_Python 标准库之时间篇