[POJ 3208] Apocalypse Someday

摘要:
Id=3208[算法]数字DP[代码]#include<algorithm>#include<bitset>#include<cctype>#include˂cerrno>#include˂clocale>#include˂cmath>#include#include#include˂cstdlib>#include#include˂ctime>#include˂1deque>#include#include#include#include˂1limits>#include#include#include#include#include˂5iosflowde<queue>#include<set>#include<sstream>#include˂stdexcept>#include˂streambuf>#include˂string>#include˂utility>#include#include#include#include#include˂1limits.h>usingspacestd;intT;longlongn;longlongf[25][5];inlinevoiddp(){inti,j;f[0][0]=1;对于{对于{f[i+1][j+1]+=f[i][j];f[i+1][0]+=f[i][j]*9;}f[i+1][3]+=f[i][3]*10;}}inlinevoidcalc{inti,j,k,len,now;longlongsum;for;now=0;sum=0;for{if{sum=f[i-1][3];forsum+=f[i-1-[k];ifn-=sum;else{printf;ifnow++;break;}}else{ifn-=f[i-1/[3];else{now=0;printf;breakintmain(){dp();scanf;while(T--){scanf;calc;}return0;}

[题目链接]

          http://poj.org/problem?id=3208

[算法]

        数位DP

[代码]

        

#include <algorithm>  
#include <bitset>  
#include <cctype>  
#include <cerrno>  
#include <clocale>  
#include <cmath>  
#include <complex>  
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <ctime>  
#include <deque>  
#include <exception>  
#include <fstream>  
#include <functional>  
#include <limits>  
#include <list>  
#include <map>  
#include <iomanip>  
#include <ios>  
#include <iosfwd>  
#include <iostream>  
#include <istream>  
#include <ostream>  
#include <queue>  
#include <set>  
#include <sstream>  
#include <stdexcept>  
#include <streambuf>  
#include <string>  
#include <utility>  
#include <vector>  
#include <cwchar>  
#include <cwctype>  
#include <stack>  
#include <limits.h> 
using namespace std;

int T;
long long n;
long long f[25][5];

inline void dp()
{
        int i,j;
        f[0][0] = 1;
        for (i = 0; i <= 20; i++)
        {
                for (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;
        }
        
}
inline void calc(long long n)
{
        int i,j,k,len,now;
        long long sum;
        for (len = 3; f[len][3] < n; len++);
        now = 0;  
        sum = 0;
        for (i = len; i >= 1; i--)
        {
                for (j = 0; j <= 9; j++)
                {
                        if (j == 6 || now == 3)
                        {
                                sum = f[i - 1][3];
                                for (k = max(3 - now - (j == 6),0); k < 3; k++) sum += f[i - 1][k];
                                if (sum < n) n -= sum;
                                else 
                                {
                                        printf("%d",j);
                                        if (now < 3 && j == 6) now++;
                                        break;
                                }
                        } else
                        {
                                if (f[i - 1][3] < n)
                                        n -= f[i - 1][3];
                                else 
                                {
                                        now = 0;
                                        printf("%d",j);
                                        break;
                                }
                        }
                }    
      }                               
        printf("
");                                                                                                                                                                                                                                                                                                                                                                                       
}

int main() 
{
        
        dp();
        scanf("%d",&T);
        while (T--)
        {
                scanf("%lld",&n);
                calc(n);    
        }
        
        return 0;
    
}

免责声明:文章转载自《[POJ 3208] Apocalypse Someday》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HDD + HDD(SSD) 多硬盘系统启动问题vscode 代码中查找并替换为换行符下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

支付宝支付api

使用:alipayDemo来配置支付宝支付接口1拿到商户号,回调地址,支付宝公钥,我的私钥---生成一个对象#给支付宝发请求,信息要用支付宝公钥加密#支付宝给我响应信息,信息会用商户的公钥加密,回来之后再拿用户私钥解密2对象.direct_pay传支付金额,支付商品描述,支付订单号---返回个加密的串3拿到加密的串拼到get请求参数部分pay_url="ht...

c++ 发送消息,模拟拖拽文件

=NULL)28{29LPSTRpszRemote=VirtualAllocEx;30if31{32::SendMessage;33bResult=TRUE;34}35}36}3738if39{40delete[]pBuf;41pBuf=NULL;42}43 returnbResult;44}在调用此函数之前,首先打开接受拖动的进程ShellExecute;...

Java switch 枚举

Switch可以使用int.short、char、Enum和String其中,Enum是1.5之后的新特性,String是java8的新特性。所以正确的写作应该如下。...

解决微信公众平台接口配置信息配置失败问题

填写完URL和TOKEN后,当您单击“提交”时,系统将始终提示您“配置失败”或其他错误,以确认URL所指向的后台页面代码是否正常。请确认TOKEN配置是否正常。此时,请检查INDEX页面的编码格式,并将其更改为GB2312进行尝试,这可能会解决您的问题。我想把这篇文章献给我浮躁的自己。...

C#Win32API编程之PostMessage

本文以C#调用Win32API函数PostMessage完成指定表单的后台鼠标和键盘模拟为例,大致解释了C#调用非托管代码和Window的消息处理机制。我们可以将PostMessage用于函数。成功与否在很大程度上取决于我们传达的信息是否真实。消息表明消息是什么。请原谅我先讲故事。我希望先解释一下PostMessage函数。这是一个异步操作,如下图所示:调用...

如何根据角色批量激活SAP Fiori服务

我们知道Fiori的角色不同于ERP,即使您的帐户具有SAP_ALL权限,但当您打开Fiori时,它也是空的:只有在您将Fiori所需的角色添加到帐户并激活相关服务时,才能使用Fioriapp。否则,打开Fioriapps将报告错误。可以通过GUI事务代码找到特定错误:/n/iwfnd/error_Log以查看特定原因。...