hdu2089 数位DP

xiaoxiao2021-02-28  95

hdu2089

#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; typedef long long ll; int a[20]; int dp[20][2]; int dfs(int pos,int pre,int sta,bool limit) { if(pos==-1) return 1; //if(!limit&&dp[pos][sta]!=-1) return dp[pos][sta]; int up=limit?a[pos]:9; int tmp=0; for(int i=0; i<=up; i++) { if(pre==6&&i==2) continue; if(i==4) continue; tmp+=dfs(pos-1,i,i==6,limit&&i==a[pos]); } //if(!limit) dp[pos][sta]=tmp; return tmp; } int solve(int x) { int pos=0; while(x) { a[pos++]=x; x/=10; } return dfs(pos-1,-1,0,true); } int main() { int le,ri; while(~scanf("%d%d",&le,&ri)&&(le+ri)) { memset(dp,-1,sizeof(dp)); printf("%d\n",solve(ri)-solve(le-1)); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2627649.html

最新回复(0)