zoukankan      html  css  js  c++  java
  • BZOJ 1026: [SCOI2009]windy数

    简单的数位dp

    直接用dfs的模板写

    坑点:0001是合法的,但是之前没考虑前导0导致将其判为不合法的

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    int bit[50];
    ll f[50][55];
    
    ll dfs(int pos,int last, bool flag)
    {
        if(pos == 0) return 1;
        if(flag && f[pos][last] != -1) return f[pos][last];
        ll ans = 0;
        int up = flag ? 9 : bit[pos];
        for(int i = 0; i <= up; i++)
        {
            if(abs(i - last) < 2) continue;
            else{
                if(last == 50 && i == 0)
                    ans += dfs(pos-1, 50, flag || i < up);
                else
                    ans += dfs(pos-1, i, flag || i < up);
            }
        }
        if(flag) f[pos][last] = ans;
        return ans;
    }
    ll solve(ll x)
    {
        int len = 0;
        while(x){
            bit[++len] = x % 10;
            x /= 10;
        }
        return dfs(len,50,false);
    }
    int main()
    {
        int t;
        memset(f,-1,sizeof(f));
        ll a;scanf("%lld",&a);
        ll b;scanf("%lld",&b);
        printf("%lld
    ",solve(b) - solve(a-1));
        return 0;
    }
    View Code
  • 相关阅读:
    排座椅
    关于math.h的问题
    客户调查
    排队打水
    删数游戏
    小数背包
    零件分组
    桐桐的组合
    桐桐的数学游戏
    桐桐的全排列
  • 原文地址:https://www.cnblogs.com/solvit/p/10554207.html
Copyright © 2011-2022 走看看