• B-number


    B-number

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652

    数位dp

    这题是暑期集训的时候做的,昨天补了数位dp的记忆化搜索做法,把艾神的递推算法更新一下。

    代码如下:

     1 #include<cstdio>
     2 #include<string>
     3 #include<cstring>
     4 #include<iostream>
     5 #define LL long long
     6 #define LEN 20
     7 #define is_1 2
     8 #define have_13 2
     9 #define mod_by_13 13
    10 #define pre_same 2
    11 using namespace std;
    12 LL t[LEN];
    13 LL dp[LEN][is_1][have_13][mod_by_13][pre_same];
    14 string s;
    15 LL len;
    16 void init_t();
    17 void solve();
    18 int main(void){
    19     init_t();
    20     while(cin>>s){
    21         len=s.size();
    22         memset(dp,0,sizeof(dp));
    23         dp[0][0][0][0][1]=1;
    24         solve();
    25         LL temp=0;
    26         for(int i=0;i<is_1;++i)
    27         for(int j=0;j<pre_same;++j)
    28             temp+=dp[len][i][1][0][j];
    29         cout<<temp<<endl;
    30     }
    31 }
    32 void init_t(){
    33     t[0]=1;
    34     for(int i=1;i<LEN;++i)
    35         t[i]=(t[i-1]*10)%13;
    36 }
    37 void solve(){
    38     for(int a=0;a<len;++a)
    39     for(int b=0;b<is_1;++b)
    40     for(int c=0;c<have_13;++c)
    41     for(int d=0;d<mod_by_13;++d)
    42     for(int e=0;e<pre_same;++e)
    43     if(dp[a][b][c][d][e]){
    44         int r=(e?s[a]-'0':9);
    45         for(int x=0;x<=r;++x){
    46             dp[a+1][x==1][c|(b&&x==3)][(d+t[len-a-1]*x)%13][e&&x==r]
    47                 +=dp[a][b][c][d][e];
    48         }
    49     }
    50 }

     感觉还是太懒了,这两周金工实习这么好的机会,居然每天也只能写一道题,而且是水题。

  • 相关阅读:
    浏览器内核中各个线程之间的关系
    Browser进程和浏览器内核(Renderer进程)的通信过程
    babel 的一些记录
    mac nvm install
    小程序云开发补充
    JavaScript 导学推荐
    网页切片
    初探响应式Web设计
    WEB ICON 的探讨
    [转载]CSS 创作指南(Beta)(css规范)
  • 原文地址:https://www.cnblogs.com/barrier/p/6002539.html
Copyright © 2020-2023  润新知