hdu 2089 不要62【數位dp】
阿新 • • 發佈:2018-12-22
題意:給定一個範圍n~m,求出數中不存在4和連續62的數的個數。
數位dp經典入門題。
#include<bits/stdc++.h> using namespace std; #define ll long long int digit[20]; ll dp[20][2]; ll dfs(int len,bool if6,bool limit) { if(len==0) return 1; if(!limit&&dp[len][if6]) return dp[len][if6]; ll cnt=0,up=(limit?digit[len]:9); for(int i=0;i<=up;i++) { if(i==4) continue; if(if6&&i==2) continue; cnt+=dfs(len-1,i==6,limit&&i==up); } if(!limit) dp[len][if6]=cnt; return cnt; } ll solve(ll num) { int k=0; while(num) { digit[++k]=num%10; num/=10; } return dfs(k,false,true); } int main() { ll n,m; while(cin>>n>>m&&n+m) { printf("%lld\n",solve(m)-solve(n-1)); } return 0; }