D - Bomb -上界数位DP模板

  • D - Bomb

  •  HDU - 3555 
  • #include 
    using namespace std;
    #define ll long long
    ll dp[20][2],digit[20],t,n;
    ll dfs(int len,bool if4,bool limit)
    {
        if(len==0)return 1;
        if(!limit&&dp[len][if4])
            return dp[len][if4];
        ll cnt=0,upbound=(limit?digit[len]:9);
        for(int i=0; i<=upbound; i++)
        {
            if(if4&&i==9)
                continue;
            cnt+=dfs(len-1, i==4,limit&&i==upbound);
        }
        if(!limit)
            dp[len][if4]=cnt;
        return cnt;
    }
    ll solve(ll num)
    {
        int k=0;
        while(num)
        {
            digit[++k]=num%10;
            num/=10;
        }
        return dfs(k,false,true);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--)
        {
            cin>>n;
            cout<
  •  

你可能感兴趣的:(DP)