Description

  windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?

  一直还是有点怕数位DP的...包括今天做这道简单的小题也花了很久的时间处理细节。

  首先大体的思路非常明显,定义一个DP f[i,j]表示第i位放数字j有多少种方法,可以通过前一位的一些满足的数字推出这一位。

  但是如何来解决在某个数A的范围内呢...?

  并且一旦前面的没有取满,这一位都是可以0..9任意取的

  并且还要考虑以这一位为开头的情况

  没有前导零,也就是说当这一位为0的时候是不能作为开头的。

  思考了一会儿,想出了一种方案。f[i,j]表示第i为放数字j并且从1~i并排除取到原数的方案数

  那么通过f[i-1]然后枚举0~9就可以先得出初步的f[i](因为i-1位以前都没有取到满了,这一位随便怎么取都不会超过原数)

  第二部分就是当前数为起点,那么我们枚举1~9,inc(f[i][j])就可以了

  还有一种情况,就是i-1位已经取满了,当前这位只能取0~num[i]这些数(num[i]表示原数在第i位的数字)

  但是我们只能枚举到num[i]-1,因为要维护f[i]这个数组的性质:没有取到满

  注意细节:第三种情况能够转移当且仅当1~i-1位都满足windy数的性质 (这里我们可以用一个bool类型标记)

  处理完之后再判断1~i是否满足windy数的性质

  f[最后一位][0..9]就是答案。

  其实还没有结束...别忘了原数,如果那个bool类型到最后还是为真,说明原数也是一个windy数

  但是显然我们在f数组里是不会统计到原数的,这个时候还要答案+1

  最后还有一个细节,就是特判0的情况,虽然题目保证>=1但是我们要的答案是solve(r)-solve(l-1),还是会即算到0的情况

  要特判solve(0)=0

  前几天写惯了树剖今天几道小题真是爽啊...

  

 /**************************************************************
Problem: 1026
User: mjy0724
Language: Pascal
Result: Accepted
Time:0 ms
Memory:228 kb
****************************************************************/ program bzoj1026;
var i,l,r:longint;
w,num:array[-..]of longint;
f:array[-..,..]of longint; function solve(p:longint):longint;
var i,j,k,ans:longint;
flag:boolean;
begin
if p= then exit();
fillchar(f,sizeof(f),);
for i:= downto do if p div w[i]> then break;
if p div w[i]> then inc(i);
for j:=i downto do num[j]:=p div w[j-] mod ;
for j:= to num[i]- do f[i,j]:=;
flag:=true;
for i:=i- downto do
begin
for j:= to do
for k:= to do if abs(j-k)>= then inc(f[i,j],f[i+,k]);
for j:= to do inc(f[i,j]);
if flag then for j:= to num[i]- do if abs(j-num[i+])>= then inc(f[i,j]);
if abs(num[i]-num[i+])< then flag:=false;
end;
ans:=;
for i:= to do inc(ans,f[,i]);
if flag then inc(ans);
exit(ans);
end; begin
w[]:=;
for i:= to do w[i]:=w[i-]*;
readln(l,r);
writeln(solve(r)-solve(l-));
end.

  

[BZOJ1026][SCOI2009]windy数 解题报告|数位dp的更多相关文章

  1. 洛谷 P2657 [SCOI2009]windy数 解题报告

    P2657 [SCOI2009]windy数 题目描述 \(\tt{windy}\)定义了一种\(\tt{windy}\)数.不含前导零且相邻两个数字之差至少为\(2\)的正整数被称为\(\tt{wi ...

  2. [SCOI2009]windy数 代码 (对应数位dp入门)

    Code1 (DP版) #include<bits/stdc++.h> #define in(i) (i=read()) using namespace std; int read() { ...

  3. BZOJ1026 SCOI2009 windy数 【数位DP】

    BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...

  4. bzoj1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8203  Solved: 3687[Submit][Sta ...

  5. 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...

  6. bzoj1026: [SCOI2009]windy数(传说你是数位DP)

    1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...

  7. BZOJ1026: [SCOI2009]windy数[数位DP]

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6346  Solved: 2831[Submit][Sta ...

  8. 【数位DP】bzoj1026: [SCOI2009]windy数

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4163  Solved: 1864[Submit][Sta ...

  9. bzoj千题计划117:bzoj1026: [SCOI2009]windy数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...

随机推荐

  1. linux的常用易忘命令

    1.查看软件安装路径 [root@localhost ~]# which gcc /usr/bin/gcc 查询进程 ps -ef |grep redis 查看端口 netstat  -lntp |g ...

  2. Kubernetes集群(概念篇)

    Kubernetes介绍 2013年docker诞生,自此一发不可收拾,它的发展如火如荼,作为一个运维如果不会docker,那真的是落伍了. 而2014年出现的kubernetes(又叫k8s)更加炙 ...

  3. 【leetcode】19. 删除链表的倒数第N个节点

    描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变 ...

  4. Python第二天 (数据类型,变量 )

    1. 把任意数据类型赋值给变量 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如: 例子:a = 123 # a是整数 prin ...

  5. Python 3 学习笔记之——数据类型

    1. 数字 类型 int, float, bool, complex type() 查看变量类型 isinstance(a, int) 查看变量类型 运算符 % 取余 // 返回商的整数部分 ** 幂 ...

  6. TF-IDF与主题模型 - NLP学习(3-2)

    分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2) 文本向量化及词袋模型 - NLP学习(3-1) 在上一篇博文 ...

  7. 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)

    首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple- ...

  8. 【UML】活动图介绍

    1.活动图,即Activity Diagram,是UML中用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一种活动到另一种活动的控制流.其本质上是一种流程图,着重表现从一个活动到另一个 ...

  9. P2P(WFD)之RegClass *****************************TBD

    三个Action Frame的IE会有带上RegClass的信息 Listen Channel element, Channel List element, Operation Channel ele ...

  10. 找jar包的网址

    http://search.maven.org/#search%7Cga%7C1%7Cmybatis http://mvnrepository.com/