题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4389

题意:f(x)表示x各位的数字和. 给定1<=L<=R<=10^9, 求[L,R]范围内满足x%f(x)=0的个数.

分析:这题和含有13且能被13整除有点类似,这里f(x)最大为81,把1~81都扫一遍即可,dp[pos][sum][x][md] 表示前pos位数,除以x的余数是md,各个位数和为sum的数的个数 .这样就能把区间内能整除自身和为1~81的所有数都求出了。

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-9
#define N 100010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int dig[];
int dp[][][][];
int dfs(int pos,int sum,int md,int x,int limit)
{
if(!pos)return sum==x&&md%sum==;
if(!limit&&~dp[pos][sum][x][md])return dp[pos][sum][x][md];
int len=limit?dig[pos]:;
int ans=;
for(int i=;i<=len;i++)
{
ans+=dfs(pos-,sum+i,(md*+i)%x,x,limit&&i==len);
}
if(!limit)dp[pos][sum][x][md]=ans;
return ans;
}
int solve(int x)
{
int len=;
while(x)
{
dig[++len]=x%;
x/=;
}
int ans=;
for(int i=;i<=;i++)
ans+=dfs(len,,,i,);
return ans;
}
int main()
{
int T,cas=;
FILL(dp,-);
scanf("%d",&T);
while(T--)
{
int a,b;
scanf("%d%d",&a,&b);
printf("Case %d: ",cas++);
printf("%d\n",solve(b)-solve(a-));
}
}

hdu4389(数位dp)的更多相关文章

  1. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

  2. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  3. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  4. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  5. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  7. 数位DP入门

    HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...

  8. 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...

  9. 浅谈数位DP

    在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...

  10. 数位DP

    题意:(hdu 4734) 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目 ...

随机推荐

  1. Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...

  2. Servlet的学习(三)

    本篇接上一篇<Servlet的学习(二)> ,主要讲诉如何使用MyEclipse来开发Servlet,和导入Servlet所需要的源代码. 现在我们来创建一个web应用,就叫[myserv ...

  3. RobotFramework 自定义Library

    RobotFramework 主要使用Python,这里简单自定义Library,以扩充RobotFramework的功能 新建一个python类,自定义需要的方法 例如: 保存成TestLibrar ...

  4. ajax和json详解

    responseText  属性以字符串形式返回HTTP响应. responseXML  属性以XML形式返回HTTP响应. JSON.stringify 函数 (JavaScript)  将 Jav ...

  5. TVS參数具体解释及选型应用

    一.首先了解TVS管的參数,我们以littelfuse的5.0SMDJ系列为例. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGcybGg=/font/ ...

  6. Oracle rank和dense_rank排名函数

    1.rank函数 rank计算一组值的排名,返回数字类型.排名可能是不连续.如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 1 3 4 5. 作为一个聚合函数,返回虚拟行在样表中的排 ...

  7. vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏

    vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏,支持每个网页用不同的IP登陆,支持多线程自动点击 适合自动打怪,游戏练级,配合自动识图功能,自动验证码技术,可以实现更多功能. ...

  8. JSP的include指令

    JSP的include 指令:向当前页面中插入的一个静态文件的内容. 在test5.jsp里面 <%@ include file="test5_1.jsp" %> 新建 ...

  9. 为VisualSVN Server增加在线修改用户密码的功能

    原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过 ...

  10. 14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件

    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件 从历史上看, 所有的InnoDB 表和索引是存储在system 表空间, 这个整体的方法是针对机器专注 ...