zoukankan      html  css  js  c++  java
  • 【HDOJ 3652】B-number

    【HDOJ 3652】B-number

    给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化!


    一入记忆化深似海。

    。。再也不想用递推了。。。发现真的非常好想 仅仅要保证满足条件把未选高位(即能任意挑数的)记录下来 不断搜索递归即可

    代码例如以下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    int dp[10][13][3];
    int digit[10];
    
    /*
    hs = 
    0 无13
    1 无13 前位为1
    2 出现13
    mod表示高位取余后的结果 遍历完后mod == 0说名能被13整除 按位取余
    */
    
    int dfs(int pos,int mod,int hs,bool high)
    {
        if(pos == -1) return hs == 2 && !mod;
        if(!high && ~dp[pos][mod][hs]) return dp[pos][mod][hs];
    
        int i,en,ans = 0,nhs,nmd;
        en = high? digit[pos]: 9;
    
        for(i = 0; i <= en; ++i)
        {
            nmd = (mod*10+i)%13;
            nhs = hs;
            if(nhs == 1 && i == 3) nhs = 2;
            else if(nhs != 2) nhs = (i == 1)? 1: 0;
            ans += dfs(pos-1,nmd,nhs,high && i == en);
        }
    
        if(!high) dp[pos][mod][hs] = ans;
        return ans;
    }
    
    int Solve(int x)
    {
        int len = 0;
        while(x)
        {
            digit[len++] = x%10;
            x /= 10;
        }
        return dfs(len-1,0,0,1);
    }
    
    int main()
    {
        memset(dp,-1,sizeof(dp));
        int n;
        while(~scanf("%d",&n)) printf("%d
    ",Solve(n));
        return 0;
    }
    
  • 相关阅读:
    学习 swift (1)
    Sbulime Text 2 修改选中字符串的颜色
    js string 和 json 互转
    Mac OSX sublime text2 各种快捷键
    webstorm keymap
    python http post json
    node.js async 几个函数
    python 爬图 helloworld
    合服导致 globalserver 起不来的问题
    ssh 登陆 端口转发
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7159813.html
Copyright © 2011-2022 走看看