hdu 2089 不要62(数位DP)
2014-02-04 18:58
302 查看
题意:求n~m之间,不包含62和4的数的个数。
思路:比较水的数位dp,主要写来练练手。虽然早就知道数位dp是有模板的,但之前一直都没看,都是自己瞎写的,今天看了看,果然写起来飘逸多了~这题很简单,只要记录当前数字前一位是否为6就行了。
代码:
思路:比较水的数位dp,主要写来练练手。虽然早就知道数位dp是有模板的,但之前一直都没看,都是自己瞎写的,今天看了看,果然写起来飘逸多了~这题很简单,只要记录当前数字前一位是否为6就行了。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<set> #include<stack> #include<cmath> #include<vector> #define inf 0x3f3f3f3f #define Inf 0x3FFFFFFFFFFFFFFFLL #define eps 1e-9 #define pi acos(-1.0) using namespace std; typedef long long ll; int dp[15][2]; int num[15]; int f(int pos,int st,bool limit) { if(pos==-1) return 1; if(!limit&&dp[pos][st]!=-1) return dp[pos][st]; int ans=0; int last=limit?num[pos]:9; for(int i=0;i<=last;++i) { if(i==4||(i==2&&st)) continue; ans+=f(pos-1,i==6,limit&&i==last); } if(!limit) dp[pos][st]=ans; return ans; } int cal(int x) { int len=0; while(x) { num[len++]=x%10; x/=10; } return f(len-1,0,true); } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); memset(dp,0xff,sizeof(dp)); int n,m; while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; printf("%d\n",cal(m)-cal(n-1)); } return 0; }
相关文章推荐
- HDU 2089 不要62 数位DP入门
- HDU 2089 不要62 && HDU 3555 Bomb (数位DP)
- HDU 2089 不要62 数位dp入门
- hdu 2089 不要62 数位dp入门
- HDU 2089 不要62 (数位DP)
- HDU-2089 不要62 (数位dp 入门题)
- HDU 2089 不要62(数位DP入门+模板)
- 【数位DP】Hdu 2089:不要62
- HDU 2089 不要62(数位dp)
- HDU 2089 不要62(数位DP)
- HDU - 2089 不要62 (暴力或数位DP)
- hdu 2089 不要62 数位DP
- Hdu 2089 不要62(数位dp)
- hdu 2089 不要62(数位dp入门)
- HDU 2089 不要62 (数位dp)
- HDU - 2089 不要62 (数位DP&记忆化dfs)水
- hdu 2089 不要62 数位dp
- HDU 2089 不要62(数位dp)
- HDU 2089 不要62 (数位dp入门题)
- HDU 2089 不要62(数位DP)