今天比赛做得一个数位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. java并发编程——Excutor

    概述 Excutor这个接口用的不多,但是ThreadPoolExcutor这个就用的比较多了,ThreadPoolExcutor是Excutor的一个实现.Excutor体系难点没有,大部分的关键点 ...

  2. 爬取代理IP

    现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...

  3. flask的cookie和session的简单原理

    在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...

  4. 在eclipse中修改项目发布tomcat的路径名

    第一种.右键点击项目,选中Properties 第二种.双击tomcat 保存 第三种.修改项目目录下的  .setting目录下的

  5. 004 --Mysql中的锁的问题

    死锁 死锁是指两个或多个事务在同一个资源上相互占用, 并请求锁定对方占用的资源, 从而导致恶性循环的现象. 当多个事务试图以不同顺序锁定资源时, 就可能产生死锁.死锁发生以后, 只有部分或者完全回滚其 ...

  6. Flink 部署文档

    Flink 部署文档 1 先决条件 2 下载 Flink 二进制文件 3 配置 Flink 3.1 flink-conf.yaml 3.2 slaves 4 将配置好的 Flink 分发到其他节点 5 ...

  7. mutt命令详解

    基础命令学习目录首页 linux命令——mutt的安装和使用[转] 首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在l ...

  8. 点击小图查看大图jQuery插件FancyBox魔幻灯箱

    今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...

  9. Node.js记录

    在智能社上听了一些关于node.js的视频,总结一小部分内容,都是总结老师讲的知识点,并且也是在不断学习的过程,所以会不断更新.也是为了怕自己遗忘一些知识点,同时现今没有什么项目可以让我去真正实践,这 ...

  10. Java集合技巧

    集合的一些技巧:   需要唯一吗? 需要:Set 需要制定顺序:  需要: TreeSet 不需要:HashSet 但是想要一个和存储一致的顺序(有序):LinkedHashSet 不需要:List ...