您的位置:首页 > 其它

HDU 2089 数位DP

2013-04-15 14:45 337 查看
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int l, r;
/*
*  0 不包含62
*  1 以2开头不包含62
*  2 包含62
*/
int dp[11][3], f[11];
void init() {
int i, j;
f[0] = 1;
for(i = 0; i <= 9; i++) f[i] = f[i-1] * 10;
dp[0][0] = 1;
for(i = 1; i <= 9; i++) {
dp[i][0] = dp[i-1][0] * 9 - dp[i-1][1];
dp[i][1] = dp[i-1][0];
//	dp[i][2] = dp[i-1][1] + dp[i-1][2] * 9;
}
}
int gao(int n) {
int a[11], len = 0;
while(n) {a[len++] = n%10; n/=10; }
int i, j, ans = 0; a[len] = 0;
bool flag = 0;
for(i = len-1; i >= 0; i--) {
for(j = 0; j < a[i]; j++) {
if(flag || (a[i+1] == 6 && j == 2) || j == 4 ) continue;
if(j == 6) ans += dp[i][0]-dp[i][1];
else ans += dp[i][0];
}
if(a[i] == 4 || (a[i+1] == 6 && a[i] == 2)) flag = 1;
}
if(!flag) ans++;
return ans;
}
int main() {
int i, j;
init();
while( cin >> l >> r) {
if(!l && !r) break;
cout << gao(r) - gao(l-1) << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: