您的位置:首页 > 其它

hdu 2089 不要62 数位dp入门

2015-12-10 10:02 330 查看
题目链接

求出a-b中不含有4以及连续的62的数的个数。

#include<bits/stdc++.h>
using namespace std;
#define mem1(a) memset(a, -1, sizeof(a))
int dp[10][10], digit[9], len;
int dfs(int len, bool state, bool fp) {     //state表示这一位是否有限制
if(!len)                                //fp表示len这一位是否只能取到小于等于digit[len]的数, 即这一位能否随便填
return 1;
if(!fp && dp[len][state]!=-1)
return dp[len][state];
int ret = 0, maxx = fp?digit[len]:9;
for(int i = 0; i<=maxx; i++) {
if(i == 4 || i==2&&state)
continue;
ret += dfs(len-1, i==6, fp&&i == maxx); //对于这一题, 当这一位为6的时候, 下一位就会有限制
}
if(!fp)
return dp[len][state] = ret;
return ret;
}
int cal(int n) {
len = 0;
while(n) {
digit[++len] = n%10;
n/=10;
}
return dfs(len, false, true);
}
int main()
{
int a, b;
while(~scanf("%d%d", &a, &b)) {
if(a+b==0)
break;
mem1(dp);
printf("%d\n", cal(b)-cal(a-1));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: