类型:数位DP
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。问[A,B]之间windy数的个数。(1 <= A <= B <= 2000000000 )

思路:

设状态dp[i][d][preAllZero] 表示 d开头的i位数中,当其preAllZero(true 表示前面都是0)的时候,windy数的个数。

为什么有preAllZero这一个状态呢?因为,比如002这个数,如果前面都是0,则是可以的,但如果前面有一位不是0 ,则这两个0违反了windy数的规则,就不行。

转移就不写了。见程序就好。

坑:

没有设preAllZero这个状态,结果一直WA。最近发现老是考虑不完全,结合近两次的原因分析,均为有了思路写程序,写完或者写到一半发现某个地方想错了,然后打补丁,结果没打全,就出了漏洞。总结两点:1:先有清晰的思路,再上阵写程序,只会节省时间。(在纸上思考要时间,你以为敲代码的时候这部分时间就省了?反而是在纸上想完全,然后敲代码的时候就可以不用想了,快啊~~)2:万一敲完发现BUG,打完补丁还不对,最好推倒,重新整理思路,然后再去写(但也不是说要把程序删了重写,或许并没到这个地步,只是没想全而已~)

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int num[];
long long dp[][][]; long long dfs(int i, int d, bool preAllZero, bool isQuery) {
if (!isQuery && ~dp[i][d][preAllZero]) return dp[i][d][preAllZero];
if (i == ) {
return dp[i][d][preAllZero] = ;
}
int end = isQuery?num[i-]:;
long long ans = ;
for (int j = ; j <= end; j++) {
if (!preAllZero && abs(j-d)<=) continue;
ans += dfs(i-, j, preAllZero && j == , isQuery && j==end);
}
if (!isQuery) dp[i][d][preAllZero] = ans;
return ans;
} long long cal(int x) {
int len = ;
while (x) {
num[++len] = x%;
x/=;
}
return dfs(len+, , true, true);
} int main() {
int a, b;
memset(dp, -, sizeof(dp));
while (~scanf("%d%d", &a, &b)) {
printf("%lld\n", cal(b) - cal(a-));
}
return ;
}

HYSBZ 1026: windy数(数位DP)的更多相关文章

  1. BZOJ 1026 windy数 (数位DP)

    题意 区间[A,B]上,总共有多少个不含前导零且相邻两个数字之差至少为2的正整数? 思路 状态设计非常简单,只需要pos.limit和一个前驱数pre就可以了,每次枚举当前位时判断是否与上一位相差2即 ...

  2. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  3. bzoj 1026 [ SCOI2009 ] windy数 —— 数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 蛮简单的数位DP,预处理 f[i][j] 表示 i 位数,以 j 开头的 windy ...

  4. bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

  5. bzoj 1026 [SCOI2009]windy数——数位dp水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 迷恋上用dfs写数位dp了. #include<iostream> #in ...

  6. 【BZOJ-1026】windy数 数位DP

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

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

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

  8. luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索

    题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...

  9. 洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]

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

  10. 【bzoj1026】[SCOI2009]windy数 数位dp

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

随机推荐

  1. java工作环境配置jdk,idea

    下载 jdk 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置环境 ...

  2. 【Python学习之六】高阶函数2(map、reduce、filter、sorted)

    3.filter filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素.相当于一 ...

  3. jCarousel,jQuery下的滚动切换传送插件

    转自:http://www.zhangxinxu.com/jq/jcarousel_zh/#Examples 介绍 jCarousel是一款 jQuery 插件, 用来控制水平或垂直排列的列表项. 这 ...

  4. Linux扩增卷组、逻辑卷以及缩减逻辑卷

    今天我们将了解怎样来扩展卷组,扩展和缩减逻辑卷.在这里,我们可以缩减或者扩展逻辑卷管理(LVM)中的分区,LVM也可称之为弹性卷文件系统. 前置需求使用LVM创建弹性磁盘存储——第一部分 什么时候我们 ...

  5. Git命令大总结(纯手办)

    Git完整命令手册地址:http://git-scm.com/docs PDF版命令手册地址:github-git-cheat-sheet.pdf 1.git config -l查看全局用户信息配置 ...

  6. Linux学习-开放源码的软件安装与升级简介

    什么是开放源码.编译程序与可执行文件 我们说过,在 Linux 系统上面,一个文件能不能被执行看的是有没有可执行的那个权限 (具有 x permission),不过,Linux 系统上真 正认识的可执 ...

  7. 安装python包

    开始--cmd pip install pymongo 直到最后给出提示successfull install pymongo-**(版本号,最新的)

  8. Linux 使用 yum 查看安装的软件包

    Linux系统下yum命令查看安装了哪些软件包: $yum list installed //列出所有已安装的软件包 yum针对软件包操作常用命令: 1.使用YUM查找软件包 命令:yum searc ...

  9. [整理]linux中颜色的含义

    蓝色(Blue): Directory  目录 绿色(Green): Executable or recognized data file  可执行文件,可执行的程序 天蓝(Sky Blue): Sy ...

  10. wpf Combobox模拟键盘按键

    private void RadComboBox_PreviewKeyUp(object sender, KeyEventArgs e) { try { var obj = (RadComboBox) ...