您的位置:首页 > 其它

HDU 3555 Bomb(数位DP)

2015-01-26 00:21 204 查看
找出1 - N中所有包含49字串的数字个数

思路:普通的数位DP,先找出布包含的,然后总数减去不包含的即可

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;
const int N = 25;

int t;
char num
;
ll dp
[10], ans;

int main() {
scanf("%d", &t);
while (t--) {
scanf("%s", num);
int n = strlen(num);
sscanf(num, "%I64d", &ans);
ans++;
int pre = 0, flag = 0;
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (j == 9 && k == 4) continue;
dp[i + 1][j] += dp[i][k];
}
}
if (flag) continue;
for (int j = 0; j < num[i] - '0'; j++) {
if (j == 9 && pre == 4) continue;
dp[i + 1][j]++;
}
if (pre == 4 && num[i] - '0' == 9) flag = 1;
pre = num[i] - '0';
}
for (int i = 0; i < 10; i++) ans -= dp
[i];
ans -= !flag;
printf("%I64d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: