zoukankan      html  css  js  c++  java
  • POJ3208Apocalypse Someday(数位DP)

    某教练考试出的题的原型。。。

    暴力也能骗不少分呢。

    解释都在代码里(大佬的代码0msAC可还行。。。)

    改一改就过了考试题妈耶。。。。

    #include<bits/stdc++.h>
    using namespace std;
    int n,f[20][20],p,g[20][20],m=1;//g数组表示处在第i个状态时接收字符j时转移的状态 
    int read(){//f[i][j]表示从j状态走i步能够查询到的含666的数的个数 ,既长度为i位的数字有多少个666数 
        int x=0,k=1;
        char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*k; 
    } 
    int main() {
        for(int i=0;i<3;i++){
            g[i][6]=i+1; //当填入的字符是6是,状态移动到下一步 
        } 
        for(int i=0;i<10;i++){
            g[3][i]=3;//已经填好3个6,剩下的你随意填 
        } 
        f[0][3]=1;//666的情况?
        for(int i=1;i<=10;i++){
            for(int j=0;j<4;j++){
                for(int k=0;k<10;k++){
                    f[i][j]+=f[i-1][g[j][k]]; 
                } 
            } 
        } 
        int t=read();
        while(t--){
            scanf("%d",&n); p=0;
            for(m=1;m<11&&f[m][0]<n;m++);
            for(int i=m,j;i>0;i--){
                for(j=0;j<10;j++){
                    if(n>f[i-1][g[p][j]]){
                       n-=f[i-1][g[p][j]]; 
                    } else{
                       break;
                    } 
                } 
                printf("%d",j);
                p=g[p][j]; 
            } 
            printf("
    "); 
        } 
        return 0;
    } 
    作者:wilxx
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    Socket编程模式
    Asp.Net Core
    TensorFlow文本与序列的深度模型
    Net
    XSS分析及预防(转)
    MyCAT部署及实现读写分离(转)
    如何搭建NTP服务(转)
    如何搭建DNS服务(转)
    如何高效地向Redis插入大量的数据(转)
    Android 通过广播启动另一个应用的Activity
  • 原文地址:https://www.cnblogs.com/wilxx/p/11743686.html
Copyright © 2011-2022 走看看