不要62(数位dp模板题)
Posted wsy107316
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不要62(数位dp模板题)相关的知识,希望对你有一定的参考价值。
AC_Code:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 #include <set> 10 #include <map> 11 #include <algorithm> 12 using namespace std; 13 typedef long long ll; 14 const int maxn=10; 15 16 int dp[maxn][maxn][2]; 17 int a[maxn]; 18 int len; 19 20 int dfs(int pos, int pre, int status, bool lead, bool limit){ 21 if( pos<1 ) return status; 22 if((!limit)&&(!lead)&&dp[pos][pre][status]!=-1) return dp[pos][pre][status]; 23 int up=limit?a[pos]:9; 24 int ans=0; 25 for(int i=0;i<=up;i++){ 26 if( pre==6&&i==2 ) continue; 27 else if( i==4 ) continue; 28 ans += dfs(pos-1,i,1,(lead&&(!i)),limit&&(i==up)); 29 } 30 return ((!limit)&&(!lead))?dp[pos][pre][status]=ans:ans; 31 } 32 33 int part(int x){ 34 len=0; 35 while(x) a[++len]=x%10,x/=10; 36 memset(dp,-1,sizeof(dp)); 37 return dfs(len,-1,1,1,1); 38 } 39 40 int main() 41 { 42 int n,m; 43 while(~scanf("%d%d",&n,&m)){ 44 if( n==0&&m==0 ) break; 45 else if( n==0 ) printf("%d ",part(m)-part(n)+1); 46 else printf("%d ",(part(m)-part(n-1))); 47 } 48 return 0; 49 }
以上是关于不要62(数位dp模板题)的主要内容,如果未能解决你的问题,请参考以下文章