zoukankan      html  css  js  c++  java
  • B-number 数位dp

      求有 13且能被13整除的个数

    显然已目前的四个状态无法对问题进行完全解答了   关于能否被13整除  有必要加一个mod状态

    当pre为2的时候说明已经存在过13了(直接继承即可)  当pre为1说明前一个为1  当pre为0说明前一个不为0  

    当我这样做完发现还是一直错

    增加了一维需要对dp数组也要增加   因为状态转移缺一不可!!!!!!!!!

    这样就顺利ac了

    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define N 10+5
    ll dp[N][20][10];
    ll a[N];
    ll dfs(int pos,int pre,int mod,bool lead,bool limit)
    {
        if(!pos)
        {
            if(mod==0&&pre==2)return 1;
            else return 0;
        }
    
        if(!limit&&!lead&&dp[pos][mod][pre]!=-1)return dp[pos][mod][pre];
        ll ans=0;
        int up=limit?a[pos]:9;
        rep(i,0,up)
        {
            if( (pre==1&&i==3) ||pre==2)
                ans+=dfs(pos-1,2,(mod*10+i)%13,lead&&i==0,limit&&i==a[pos]);
            else
                ans+=dfs(pos-1,i==1?1:0,(mod*10+i)%13,lead&&i==0,limit&&i==a[pos]);
        }
        if(!limit&&!lead)dp[pos][mod][pre]=ans;
        return ans;
    }
    ll solve(ll x)
    {
        int pos=0;
        while(x)
        {
            a[++pos]=x%10;
            x/=10;
        }
        return dfs(pos,0,0,true,true);
    }
    int main()
    {
       ll x;
        while(scanf("%lld",&x)==1)
        {
            CLR(dp,-1);
            printf("%lld
    ",solve(x));
        }
        return 0;
    }
  • 相关阅读:
    clound R
    ubuntu 下安装查看pdf的工具
    统计门户
    neusoft 东软
    一位做数据分析的老师的blog
    ubuntu 下安装查看pdf的工具
    R语言矩阵转置
    取经难,取真经更难。
    R function
    只针对中英文混合分词的中文分词器
  • 原文地址:https://www.cnblogs.com/bxd123/p/10714237.html
Copyright © 2011-2022 走看看