B吉利数字
时限:1s

【题目描述】
算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数。现在叫你计算某个区间内有多少个吉利数字。

【输入】
第一行为样例个数N。接下来N行,每一行代表一个输入样例,每个输入样例有2个数,分别代表某个区间的起点a和终点b。
注意所求区间为[a,b],1<=a<=b<=10^9

【输出】
N行。对于第x个输入样例,在第x行输入该样例所对应的结果。

【输入样例】
2
1 10
1 20

【输出样例】
0
1

【Hint】1-10之内无幸运数,1-20内只有19 这1个幸运数
------------------------------------------------------------------------------------

数位dp入门题。

一开始参考了数位dp入门ppt的非递归写法,先打个表再计算,结果YY了半天还是错了T^T

这里有个用dfs写法写数位dp的模板:

http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html

代码:

 #include <stdio.h>
#include <string.h>
int dp[][];
int dig[]; int dfs(int i,int s,bool e)
{
if (!i) return (s==?:);
if ((!e)&&(dp[i][s]!=-)) return dp[i][s];
int res=;
int u=e?dig[i]:;
for (int q=;q<=u;q++)
res+=dfs(i-,(s+q)%,e&&q==u);
if (!e) dp[i][s]=res;
return res;
} int f(int n)
{
int len = ;
while(n)
{
dig[++len] = n % ;
n /= ;
}
return dfs(len,,true);
} int main()
{
int a,b,T;
memset(dp,-,sizeof(dp));
scanf("%d",&T);
while (T--)
{
scanf("%d %d",&a,&b);
printf("%d\n",f(b)-f(a-));
}
return ;
}

核心部分:(来自neopenx大神,orz)

 int dfs(int len,int remain,bool fp)
{
if(!len) return remain==?:;
if(!fp&&dp[len][remain]!=-)
return dp[len][remain];
int ret=,fpmax=fp?digit[len]:;
for(int i=;i<=fpmax;i++)
ret+=dfs(len-,(remain+i)%,fp&&i==fpmax);
if(!fp) dp[len][remain]=ret;
return ret;
} int f(int n)
{
int len=;
while(n)
{
digit[++len]=n%;
n/=;
}
return dfs(len,,true);
}

len:表示当前扫描到的数的位数,从高位向地位扫描

remain:表示当前状态。如本题中表示从最高位到当前位各位数字和%10

fp:又叫first place,neopenx的大神的理解是第一次打表

该dfs函数的基本思想也是打个表记下来,边记边用

fpmax:当前最高位

扩展:hdu2089

http://blog.csdn.net/dgq8211/article/details/9296953

xbz分组题B 吉利数字 数位dp入门的更多相关文章

  1. HDU 2089 不要62【数位DP入门题】

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

  2. 数位dp入门 hdu2089 不要62

    数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...

  3. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  4. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  5. 哈尔滨工程大学ACM预热赛 G题 A hard problem(数位dp)

    链接:https://ac.nowcoder.com/acm/contest/554/G Now we have a function f(x): int f ( int x ) {     if ( ...

  6. hdu 2089 数位dp入门题

    #include<stdio.h> //dp[i][0]代表不存在不吉利数字 //dp[i][1]代表不存在不吉利数字但是以2开头 //dp[i][2]代表存在不吉利数字 #define ...

  7. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

  8. 数位DP入门题——[hdu2089]不要62

    数位DP是我的噩梦. 现在初三了,却没AC过数位DP的题目. 感觉数位DP都是毒瘤-- 题目 hdu不用登录也可以进去,所以就不把题目copy到这里来了. 题目大意 求区间[n,m][n,m][n,m ...

  9. SCUT - 289 - 小O的数字 - 数位dp

    https://scut.online/p/289 一个水到飞起的模板数位dp. #include<bits/stdc++.h> using namespace std; typedef ...

随机推荐

  1. bundle是什么?

    bundle就是一个数据对象,像Map,HashMap一样key-value键值对的方式存放数据.在android中用于应用程序之间数据传输,不过是要靠对象使用的 谢谢,又知道了一种在Activity ...

  2. java 14 -10 Calendar类以及练习

    Calendar:它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法, 并为操作日历字段(例如获得下星期的日期)提供了一些方法. 1 ...

  3. Android Studio系列教程四--Gradle基础

    Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...

  4. MSMQ消息队列安装

    一.Windows 7安装.管理消息队列1.安装消息队列   执行用户必须要有本地 Administrators 组中的成员身份,或等效身份.   具体步骤:    开始—>控制面板—>程 ...

  5. C#模拟POST提交表单(一)--WebClient

    C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh-cn/library ...

  6. android Notification 的使用

    最近一直在研究 android ,并一边研究一边做应用.其中遇到了把程序通知常驻在 Notification 栏,并且不能被 clear 掉(就像android QQ一样)的问题.经过研究实现了其功能 ...

  7. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  8. Github克隆别人的库

    一. 首先在网站上进入别人的库(通过别人提供的链接或者自己在页面上查询),然后在右下方选择SSH,将链接复制下来. 二. 在你的电脑上新建一个与人家库名相同的文件夹,然后在文件夹上右击,在弹出菜单上选 ...

  9. poj2154-color-polyan次二面体+欧拉函数优化

    N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...

  10. RxJava简介

    RxJava简介 本文为前段时间学习RxJava时留下的历史遗留笔记,仅作纪念,科学的大神教学帖子在这里-> 给 Android 开发者的 RxJava 详解 通过链式调用序列实现基于事件流的异 ...