HDU-2089-数位dp

xiaoxiao2021-02-27  328

题目大意:不要62和4的数字在区间(n,m)有几个;

题目解析:数位dp模板题,dfs的时候判断前一位是否为6;

AC代码:

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> using namespace std; int dp[12][2],n,m,num[12]; int dfs(int pos,int sta,bool limit) { if(pos==-1) return 1; if(!limit&&dp[pos][sta]!=-1) return dp[pos][sta]; int u=limit?num[pos]:9; int ans=0; for(int i=0;i<=u;i++) { if(i==4) continue; if(sta==1&&i==2) continue; ans+=dfs(pos-1,i==6,limit&&i==num[pos]); } if(!limit) return dp[pos][sta]=ans; return ans; } int cal(int x) { int pos=0; while(x) { num[pos++]=x; x/=10; } return dfs(pos-1,0,true); } int main() { memset(dp,-1,sizeof(dp)); while(scanf("%d%d",&n,&m)!=EOF&&(n!=0&&m!=0)) { printf("%d\n",cal(m)-cal(n-1)); } }

转载请注明原文地址: https://www.6miu.com/read-3092.html

最新回复(0)