数位dp
Posted lmjer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数位dp相关的知识,希望对你有一定的参考价值。
一,入门题
例一:HDU 2089 不要62
代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[21][3]; int a[100]; 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 ans=0; for (int i=0;i<=up;i++){ if(pre==6&&i==2) continue; if(i==4) continue; ans+=dfs(pos-1,i,i==6,limit && i==a[pos]); } if(!limit) dp[pos][sta]=ans; return ans; } int solve(int x){ int pos=0; while(x){ a[pos++]=x%10; x/=10; } return dfs(pos-1,-1,0,true); } int main(){ int l,r; memset(dp,-1,sizeof(dp)); while(scanf("%d%d",&l,&r) && l+r ){ // scanf("%d%d",&l,&r); printf("%d ",solve(r)-solve(l-1)); } return 0; }
以上是关于数位dp的主要内容,如果未能解决你的问题,请参考以下文章