今天比赛做得一个数位dp。

首先声明这个题目在数位dp中间绝对是赤裸裸的水题。毫无技巧可言。

题目的意思是个你a和b,要求出在a和b中间有多少个数满足数位上各个数字的和为10的倍数。

显然定义一个二维数组f,f[i][j]表示i位任意的数组合所有数位对10取模后余数为j的种类。

这样直接枚举1-10就可以得出i和i+1的递推关系了呢。简单了吧。

在求答案的时候不是直接求的,用的是数位dp最最经典的答案求法:

  那就是定义一个count(x)函数表示不大于x满足的个数,这样,所求的答案就等于count(b)-count(a)了

下面的问题就是如何求得count这个函数值了。

首先我们把数x进行分解,用数组中的一个元素表示x的相对位数的数字。

这样对于从低位开始数起的第i位,如果数位的数值为a[i],那么我们可以任取0~a[i]-1(想想为什么?这是典型的数位dp的求法),同时保存前面的和并且把a[i]加到和中并取模。

这样如此下去直到求出所有的,同时就是等于x本身的数没有考虑,我们可以直接特判一下就OK了。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std; ll f[][],sum[],t,A,B,n,a[],ans,tep; ll count(ll x)
{

if
(x<) return;
if
(x<) return;
n=ans=tep=;
while
(x) a[++n]=x%,x/=;
for
(ll i=n; i>; i--)
{

for
(ll k=; k<a[i]; k++)
ans+=f[i-][(-(tep+k)%)%];
tep=(tep+a[i])%;
}

for
(ll i=; i<=a[]; i++)
if
((i+tep)%==) ans++;
return
ans;
}
int main()
{

memset(f,,sizeof f);
for
(ll i=; i<=; i++) f[][i]=;
for
(ll i=; i<=; i++)
{

for
(ll j=; j<; j++)
for
(ll k=; k<; k++)
f[i+][(j+k)%]+=f[i][j];
}

/*for (int i=1; i<=3; i++)
{
for (int j=0; j<=10; j++) cout<<f[i][j]<<' '; cout<<endl;
}*/
for
(ll i=; i<=; i++) sum[i]=f[i][];
cin>>t;
for
(ll cas=; cas<=t; cas++)
{

cin>>A>>B;
if
(A>B)
{

cout<<"Case #"<<cas<<": "<<<<endl;
continue
;
}

/*ll tep=count(B);
cout<<"counting B is: "<<tep<<endl;*/
cout<<"Case #"<<cas<<": "<<count(B)-count(A-)<<endl;
}

return
;
}
代码写得十分之挫,而且又很多调试的语句都没有删掉,望谅解。
本人在此最想说的是,dp并不是本题最优解法。
想想对于0-9果断至少有一个加上前面的和是10的倍数。
然后顺着想下去就会发现是如此有趣的规律。我还没想过,但是猜着大概就是这样。
陈兴老师也说了不要用数位dp呢。
呵呵,打个表就知道内在规律,以及解法呢。

HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2的更多相关文章

  1. HDU 4722 Good Numbers(位数DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description If we sum up every digit of a number and the result can be exactly divided by 10, we say ...

  2. 2013 ACM/ICPC Asia Regional Online —— Warmup2 ABEGKL

    HDU4716 A. A Computer Graphics Problem A题目描述 题意:输出手机剩余电量,保证给出的数是10的倍数. 题解:水题,按题意输出即可. 代码: #include & ...

  3. 2013 ACM/ICPC Asia Regional Online —— Warmup2

    HDU 4716 A Computer Graphics Problem 水题.略 HDU 4717 The Moving Points 题目:给出n个点的起始位置以及速度矢量,问任意一个时刻使得最远 ...

  4. HDU 4717 The Moving Points(三分法)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description There are N points in total. Every point moves in certain direction and certain speed. W ...

  5. HDU 4719 Oh My Holy FFF(DP+线段树)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description N soldiers from the famous "*FFF* army" is standing in a line, from left to ri ...

  6. HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  7. HDU4726——Kia's Calculation——2013 ACM/ICPC Asia Regional Online —— Warmup2

    题目的意思是给你两个数字(多达10^6位) 做加法,但是有一点,没有进位(进位不算,相当于这一位相加后对10取模) 你可以任意排列两个数字中的每一位,但是不能是0开头. 现在题目要求以这种不进位的算法 ...

  8. hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...

  9. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. Spring是什么?优点是什么?

    大部分项目都少不了Spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢 Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与 ...

  2. 2018年美国大学生数学建模竞赛(MCM/ICM) C题解题思路

    整个赛题是一道大数据的深层挖掘与分析赛题,数据在这是很重要的组成因 素,因此大家首先应该把题目所给的数据搞清楚搞明白.赛题的关键是能源生产 和使用的合理安排,针对第一部分,主要解决能源的配置与评价问题 ...

  3. python中while循环和for循环的定义和详细的使用方法

    1. 循环的定义,反复做某事,具有明确的开始和结束.   2. 在Python中循环有while和for两种方式: While循环:1) 语法结构 >>> while 条件: ... ...

  4. 解决了一个困扰我近一年的vim显示中文乱码的问题

    今天解决了vi命令打开日志文件中文总是显示乱码的问题.由于项目组中的日志包含一些特殊字符,所以使用vim打开日志文件时总是不能正确识别出文件字符编码.此时用:set fileencoding命令可以看 ...

  5. easyx图形库做贪吃蛇游戏

    编程总是对着一个黑窗口,可以说是非常乏味了,于是喵喵就翻出来了以前用easyx图形库做图形界面的贪吃蛇游戏. 不过大家只是当做提高编程的乐趣来学习吧,想进一步做的话可以学习QT,还有其他的框架. 这是 ...

  6. Netty源码分析第5章(ByteBuf)---->第6节: 命中缓存的分配

    Netty源码分析第6章: ByteBuf 第六节: 命中缓存的分配 上一小节简单分析了directArena内存分配大概流程, 知道其先命中缓存, 如果命中不到, 则区分配一款连续内存, 这一小节带 ...

  7. python 拾遗

    三引号 可以当做多行字符串使用.在类或者方法中用的时候,可以当做docstrings来使用.具体的规则为: 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行 ...

  8. Shader做剪影效果

    某渣渣甩了一个需求给我,并且说我不会写.我明知是激将法,但是想想这需求也太简单了,我好像也不怎么会QAQ.为了表示我对shader的热爱,写就写. 需求是这样的: 这是一个漂亮的MM,但是渣渣不想让人 ...

  9. 搭建gitpage博客

    http://blog.csdn.net/jzooo/article/details/46781805

  10. Bing词典vs有道词典比对测试报告——功能篇之核心功能

    必应词典vs有道词典 核心功能对比 从应用的UI布局来看,这两款软件的功能如下: 相同 不同 必应词典 词典.例句.翻译 百科 有道词典 词典.例句.翻译 应用 就词典类软件来说,词典是最核心的功能. ...