题意:求[A,B]内有多少个数,满足x % f(x) == 0。

解法:数位DP。转化为ans = solve(b) - solve(a - 1)。设dp[i][sum][mod][r]表示长度为i,各位和为sum,模mod余r的数的个数。

当在数字后面新添加一位j时,则有dp[i + 1][sum + j][mod][(r * 10 + j) % mod] += dp[i][sum][mod][r]。

当一个数比n小时,一定是因为从某一位开始出现了当前位的数字比n当前位数字小的情况,从高到低枚举这种情况出现的位数,枚举这位的数字,枚举所有数字的和,即模,满足等式(num + j * 10 ^ i + r) % mod == 0时即符合情况,num为前i位确定时的数值。

for i len...1

for j 0...digit[i]

for mod 1...81

for r 0...mod - 1

if (当前已确定位数值 + j * 10 ^ i + r) % mod == 0

ans += dp[i - 1][mod - 前i位和 - j][mod][r]

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
int dp[12][85][85][85] = {0};
int f(int x)
{
if(x == 0) return 0;
return f(x / 10) + x % 10;
}
void init()//初始化
{
for(int i = 0; i < 85; i++)
dp[0][0][i][0] = 1;
for(int i = 0; i < 9; i++)
for(int j = 0; j < 85; j++)
for(int k = 0; k < 85; k++)
for(int l = 0; l < k; l++)
for(int m = 0; m < 10 && m + j < 85; m++)
dp[i + 1][j + m][k][(l * 10 + m) % k] += dp[i][j][k][l];
}
int solve(int x)
{
int ans = 0;
if(x && (x % f(x) == 0))
ans++;
int digit[15] = {0};
int ten[15] = {0, 1, 0};
for(int i = 2; i <= 10; i++)
ten[i] = ten[i - 1] * 10;
int len = 1;
int tmp = x;
while(tmp)
{
digit[len++] = tmp % 10;
tmp /= 10;
}
int sum = 0;
int num = 0;
for(int i = len - 1; i >= 1; i--)//枚举位数
{
for(int j = 0; j < digit[i]; j++)
for(int k = 1; k < 85; k++)
for(int l = 0; l < k; l++)
if((k >= (sum + j)) && ((num + j * ten[i] + l) % k == 0))
ans += dp[i - 1][k - sum - j][k][l];
sum += digit[i];
num += digit[i] * ten[i];
}
return ans;
}
int main()
{
init();
int T;
while(~scanf("%d", &T))
{
int cnt = 1;
while(T--)
{
int a, b;
scanf("%d%d", &a, &b);
printf("Case %d: %d\n", cnt++, solve(b) - solve(a - 1));
}
}
}

HDU 4389 X mod f(x)的更多相关文章

  1. HDU - 4389 X mod f(x)(数位dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 为[A,B] 区间内的数能刚好被其位数和整除的数有多少个. 分析 典型的数位dp...比赛时想不出状 ...

  2. HDU 4389——X mod f(x)(数位DP)

    X mod f(x) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  3. hdu 4389 X mod f(x) 数位DP

    思路: 每次枚举数字和也就是取模的f(x),这样方便计算. 其他就是基本的数位Dp了. 代码如下: #include<iostream> #include<stdio.h> # ...

  4. HDOJ 4389 X mod f(x)

    数位DP........ X mod f(x) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  5. HDU X mod f(x)(题解注释)

    X mod f(x) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. HDU4389:X mod f(x)(数位DP)

    Problem Description Here is a function f(x): int f ( int x ) { if ( x == 0 ) return 0; return f ( x ...

  7. HDU 多校对抗 F Naive Operations

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  8. hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))

    Remainder Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. hdu 4389 数位dp

    求区间内满足x%fx==0的数的个数,fx为该数各个位数上的数字之和Sample Input21 1011 20 Sample OutputCase 1: 10Case 2: 3 大小不是你想开,想开 ...

随机推荐

  1. 【BZOJ1251】序列终结者

    Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...

  2. python学习笔记26(python中__name__的使用)

    在python中,每个py文件都是一个模块,也都是一个可执行文件,即包含main方法.因此,对每个py文件,可以单独运行,也可以import它给其他客户使用,这两种情况不一样. 1. 如果模块是被导入 ...

  3. unity3d引擎程序员养成

    标准流程:1. c++ Primer 英文版(第四或第五版)全部看完习题做完是必须的.渲染程序设计比较复杂,后期会用到c++的全部特性.c++学的越好后面越轻松.要看英文版,计算机翻来覆去就那么几个单 ...

  4. C#正则表达式Regex类

    C#正则表达式Regex类的使用 C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间 ...

  5. JPA2 关于 PagingAndSortingRepository

    And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd): Or --- 等价于 SQL 中的 ...

  6. 【noi2013】【bz3244】树的计数

    题目概括:给出树的dfs.bfs序 求树的期望高度 题解:由于我比较懒 先copy一段百度文库的题解~void copy(){我们可以发现,所求的树之所以会有很多种,是因为出现了这种情况:对于A.B, ...

  7. 4.2 spring-import 标签的解析;

    对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分模块,那就是仁者见仁,智者见智了.我的策略是使用im ...

  8. 成功解决Tomcat-JDBC-MySQL乱码

    0.MySQL-JDBC驱动文档 官方解释 1.数据库的字符编码和表内字段的编码 在MySQL中数据库的字符编码和表内字段的编码的要指定为utf8(utf8_general_ci) 2.jsp中 pa ...

  9. Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details. ShareSDK 也有这种错误

    Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for ...

  10. web机制简笔

    1 Web 1.1输入url地址 1.1.1服务器进行url解析,调用相关服务处理,返回处理结果—字符串 1.2得到返回字符串(显示描述+操作触发描述) 1.3Internet explore进行相关 ...