HDU 2089 不要62——数位dp

来源:互联网 发布:南风知我意温南百度云 编辑:程序博客网 时间:2024/06/06 03:37
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;int a[20];int dp[20][2];int dfs (int pos, int pre, int sta, int limit) {    if (pos == -1) return 1;    if (!limit && dp[pos][sta] != -1) return dp[pos][sta];    int up = limit ? a[pos] : 9;    int temp = 0;    for (int i = 0; i <= up; i++) {        if (pre == 6 && i == 2) continue;        if (i == 4) continue;        temp += dfs(pos - 1, i, i == 6, limit && i == a[pos]);    }    if (!limit) dp[pos][sta] = temp;    return temp;}int solve(int x) {    int pos = 0;    while (x) {        a[pos++] = x % 10;        x /= 10;    }    return dfs(pos - 1, -1, 0, true);}int main(){    int le, ri;    while (scanf("%d %d", &le, &ri) == 2 && le + ri) {        memset(dp, -1, sizeof(dp));        printf("%d\n", solve(ri) - solve(le - 1));    }    return 0;}

原创粉丝点击