标签: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