BZOJ 1799 self 同类分布(数位dp,区间各位数字和能整除原数的数字个数)

原创 2016年08月31日 00:16:22

题目链接:
BZOJ 1799 self 同类分布
题意:
给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数。
数据范围:ab1018
分析:
暴力枚举所有可能的数字和即可。
需要判断余数等于0并且所有数字和等于设定的sum。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef long long ll;

int digit[20];
ll dp[20][200][200];

ll dfs(int pos, int rem, int pre, int sum, int limit)
{
    if (pos == -1) return rem == 0 && pre == sum;
    if (!limit && dp[pos][rem][pre] != -1) return dp[pos][rem][pre];
    if (pre > sum) return 0;
    int last = limit ? digit[pos] : 9;
    ll ret = 0;
    for (int i = 0; i <= last; ++i) {
        ret += dfs(pos - 1, (rem * 10 + i) % sum, pre + i, sum, limit && (i == last));
    } 
    if (!limit) dp[pos][rem][pre] = ret;
    return ret; 
}

ll solve(ll x)
{
    int len = 0;
    memset(digit, 0, sizeof(digit));
    while (x) {
        digit[len++] = x % 10;
        x /= 10;
    }
    ll ret = 0;
    for (int i = 1; i <= 9 * len; ++i) {
        memset(dp, -1, sizeof(dp));
        ret += dfs(len - 1, 0, 0, i, 1);
    }
    return ret;
}   

int main()
{
    ll n, m;
    while (~scanf("%lld%lld", &n, &m)) {
        printf("%lld\n", solve(m) - solve(n - 1));
    }
    return 0;
}
版权声明:缥缈玉京人,想语然、京兆眉妩。

相关文章推荐

数位dp汇总

参考了一些博客中的题目推荐,然后再回顾并补充了下数位dp。

bzoj1799 [Ahoi2009]self 同类分布 数位dp

题目链接:点这里!!! 题意:给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数(1 题解: 做的第二道数位dp的题。我们可以枚举各位数字之和,最大也就9*17。 然...

bzoj1799: [Ahoi2009]self 同类分布

传送门 因为模数最多只有9*17=163,所以我们暴力悲剧模数。 然后就是dp辣。 设f[0/1][i][j][k]表示填了前i位,和是j,数字对mo取模的值是k,前边的数字是否前部和上限相同(...

【bzoj1799】【AHOI2009】【同类分布】【数位dp】

Description 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数。 Input Output Sample Input 10 19 Sample Output 3 ...

BZOJ 1799 [Ahoi2009]self 同类分布【数位dp

枚举数字总和为多少(设为mod),f[i][j][k][0..1]表示算到第i位,前i位的和为j,这个数的数值%mod=k,是否顶上界 转移就是f[i+1][j+x][(k*10+x)%mod] +...

bzoj1799 self 同类分布 数位Dp

首先注意到一个数的数字和是很小的(相对于这个数字来说),最大为9*17=163,那么我们可以枚举这个数位和,因为这个数位和是要作模数的,因此除了枚举别无他法。假设现在数位和为mod,令        ...

bzoj1799[Ahoi2009]self 同类分布 【数位dp】

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1799 分析:设状态dp[i][j][k],表示长度为i,所有位数和为j,当前模的余数为k,因...

【bzoj1799】 AHOI2009 同类分布 数位dp

好久没写数位dp了,学习了一种新的数位dp的写法,没有以前的复杂,不需要分dp和计算两步了,而且少了一位状态,快了很多。 题解可以参照:http://timeplayer.blog.163.com/...

bzoj 1799: [Ahoi2009]self 同类分布 题解

【原题】 1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec  Memory Limit: 64 MB Submit: 554  Solved: 1...

Codeforces 55D Beautiful Numbers(数位dp,能被自己各个位上数字整除的数字个数)

题目链接: Codeforces 55D Beautiful Numbers 题意: 定义:一个数如果能够被它所有位上非零数字整除那么这个数就是Beautiful Numbers。 给一个区间...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)