uestc 1307 统计数位之间相差不小于2的数的个数
2013-05-07 13:55
267 查看
windy定义了一种windy数。
不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。
windy想知道,在A和B之间,包括A和B,总共有多少个windy数?
解题思路:
简单枚举+记忆化搜索
View Code
不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。
windy想知道,在A和B之间,包括A和B,总共有多少个windy数?
解题思路:
简单枚举+记忆化搜索
View Code
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using std::cout; using std::endl; typedef long long LL; int const N = 20; LL A,B; int bit ,len; LL dp [11]; LL getsum1(int t,int limit,int last,int limit2) { if(t==0) { if(!limit2)return (last==0?0:1); return 1; } if(!limit&&limit2&&dp[t][last]!=-1)return dp[t][last]; int up=(limit?bit[t]:9); LL ans=0LL; for(int i=0;i<=up;i++) { if(abs(i-last)>=2||!limit2) { ans+=getsum1(t-1,limit&&(i==up),i,limit2||i); } } if(!limit&&limit2&&dp[t][last]==-1)dp[t][last]=ans; return ans; } LL getsum2(LL n) { if(n<10)return n; for(len=0;n;n/=10)bit[++len]=n%10; return getsum1(len,1,-2,0); } int main() { memset(dp,-1,sizeof(dp)); while(~scanf("%I64d %I64d",&A,&B)) { cout<<getsum2(B)-getsum2(A-1)<<endl; } return 0; }
相关文章推荐
- UESTC 1307 WINDY数 (数位DP,基础)
- 几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)
- UESTC 1307 —— 数位DP
- UESTC1307 windy数 数位DP
- 几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
- UESTC 1307 windy数(数位DP)
- 几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)
- 【数位dp】【HDU 3555】【HDU 2089】【UESTC 1307】【CodeForces 258B】数位DP入门题
- uestc1307 windy数 (数位DP)
- uestc 1307 windy数 --- 数位DP
- uestc 1307 windy数 数位DP
- uestc 1307 windy数 数位DP
- UESTC 250 数位dp(数字相位数之间的差值不小于2)
- UESTC 1307 windy数(数位DP)
- UESTC 1307 数位DP (递归 or 非递归)
- UESTC 1307 windy数(数位DP)
- UESTC 1307 windy数 数位DP
- uestc 1307 数位DP
- 简单数位dp,uestc1307
- UESTC 1307