标签:amp sizeof namespace creat 标准 数位 mes 数位dp while
参考:
从最高位开始递归,如果有4或者62则不往下走。
dp[i][j]表示的是有i位数字,且第i位数字为j并满足题给条件的数字的个数其实也就是记忆化搜索的感觉,保留搜过的状态,以避免重复运算。
代码:
// Created by CAD on 2019/11/9.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std;
int dp[10][10];
int dig[10];
int dfs(int op,int last,bool flag)
{
    if(op==0) return 1;
    if(!flag&&~dp[op+1][last]) return dp[op+1][last];
    int ans=0;
    int up=flag?dig[op]:9;
    for(int i=0;i<=up;++i)
        if(i==4||(last==6&&i==2)) continue;
        else ans+=dfs(op-1,i,flag&&(i==up));
    if(!flag) dp[op+1][last]=ans;
    return ans;
}
int solve(int x)
{
    int cnt=0;
    mst(dig,0);
    while(x)
        dig[++cnt]=x%10,x/=10;
    return dfs(cnt,0,1);
}
int main()
{
    ios::sync_with_stdio(false);
//    cin.tie(0);
    int n,m;
    while(cin>>n>>m,n|m)
    {
        mst(dp,-1);
        cout<<solve(m)-solve(n-1)<<"\n";
    }
    return 0;
}标签:amp sizeof namespace creat 标准 数位 mes 数位dp while
原文地址:https://www.cnblogs.com/CADCADCAD/p/11826690.html