不要62 ---数位DP
生活随笔
收集整理的這篇文章主要介紹了
不要62 ---数位DP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:求m到n中不含62和4的數的個數。
題目鏈接
思路:數位dp模板求滿足的數字或不滿足的數字,剛學,就求不滿足的數。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
#define inff 0x3f3f3f3f
int dp[25][4];//位數,狀態 0啥都不是,1第一位為6,2含有62,3含有4
int a[10];
int get(int str,int i)
{if(str==2)return 2;else if(str==3)return 3;else{if(i==4)return 3;if(str==1){if(i==2)return 2;}if(i==6)return 1;return 0;}
}
int dfs(int pos,int str,int lim)
{if(pos==-1)return str==2||str==3;if(!lim&&dp[pos][str]!=-1)return dp[pos][str];int up=lim?a[pos]:9,ans=0;for(int i=0;i<=up;i++)ans+=dfs(pos-1,get(str,i),lim&&up==i);return lim?ans:dp[pos][str]=ans;
}
int solve(ll n)
{memset(dp,-1,sizeof(dp));memset(a,0,sizeof(a));int len=0;while(n){a[len++]=n%10;n/=10;}return dfs(len-1,0,1);
}
int main()
{ll m,mm,n=1000000;while(cin>>m>>mm,m+mm)// cout<<solve(m)<<" "<<solve(mm)<<endl;cout<<mm-m+1-solve(mm)+solve(m-1)<<endl;return 0;
}
?
總結
以上是生活随笔為你收集整理的不要62 ---数位DP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Monitor CodeForces -
- 下一篇: HDU - 1269迷宫城堡 -强连通t