• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    研修班第四次课笔记
    形象革命——穿搭
    对管理者的几点要求
    全链路压测
    项目管理最忌的5件事,千万不要忽视!
    2018年计划小目标(9月)PMP
    NLP是什么
    (深度好文)重构CMDB,避免运维之耻
    《转》我们不得不面对的中年职场危机
    项目管理,让自己更从容
  • 原文地址:https://www.cnblogs.com/wilxx/p/11743686.html
Copyright © 2020-2023  润新知