数位 dp。

// 数位 dp 其实是爆搜加记忆化
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N=15; //数据范围是 10^n 就可以开 n 那么大的数组。
int dp[N][2][2][N],a[N]; //dp 数组用来记忆化,a 数组用来数位分离
int dfs(int loc,bool limit,bool lead,int pre)
// loc : 目前搜到的位数
// limit : 前一位是否为最大值,比如 123 中百位搜到了 1(最大),那么十位如果搜到了 1 那么各位就可以搜 0~9,如果十位搜到了 2 那么个位就只能搜 0~3 了。
// lead : 是否有前导零,如果有前导零就不用处理相邻两位 abs >=2 的条件了(因为前导零不计入计算)。
// pre : 搜到的上一位的数字,用于判断相邻两位 abs >=2。
{
if (!loc) return 1; //如果搜到了最后一位果断返回 1
if (dp[loc][limit][lead][pre]!=-1) return dp[loc][limit][lead][pre]; //如果搜过了果断返回
int ans=0,maxbit=limit?a[loc]:9; //maxbit 代表能搜的数位 0~maxbit,ans 累加答案。
for (int i=0;i<=maxbit;i++) //枚举这一位的所有可能性,记得有等号
if (lead||abs(pre-i)>=2) ans+=dfs(loc-1,limit&(i==a[loc]),lead&(i==0),i);
// 如果有前导零或者满足相邻两位 abs >=2,那么搜索。
// 下一位的 loc 显然是目前的 loc-1;
// 下一位的 limit 在这一位搜到了极限(即 limit=1)的且 i==a[loc](目前的这一位最大)的条件下才可以,需要用 &。
// 下一位的 lead 在这一位有前导零的条件下(如果不判断那么 303 也会被判做有前导零了)且这一位为零的条件下才可以,同 limit,需要用 &。
// pre 显然是 i。
return dp[loc][limit][lead][pre]=ans; //记忆化
}
int solve(int q) // 1~q 的数字数量
{
memset(dp,-1,sizeof dp); //将 -1 视作为搜到的状态表示
int len=0; //数字位数
while (q){a[++len]=q%10;q/=10;} //数位分离
return dfs(len,1,1,0);
// 首先 loc 肯定是 len,从高往低搜嘛
// limit 肯定是 1,相当于我们在每个数字前面加上一个前导零,这样最高位就不会溢出(?)了。
// lead 同 limit,建立一个前导零。
// pre 同 lead,limit 建立了前导零,所以 pre 肯定是 0 了。
}
int main()
{
int l,r;
cin>>l>>r;
cout<<solve(r)-solve(l-1); //用前缀和思想相减。
return 0;
}

题解 P2657 【[SCOI2009] windy 数】的更多相关文章

  1. C++ 洛谷 P2657 [SCOI2009]windy数 题解

    P2657 [SCOI2009]windy数 同步数位DP 这题还是很简单的啦(差点没做出来 个位打表大佬请离开(包括记搜),我这里讲的是DP!!! 首先Cal(b+1)-Cal(a),大家都懂吧(算 ...

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

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

  3. P2657 [SCOI2009]windy数

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

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

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

  5. 洛谷——P2657 [SCOI2009]windy数

    P2657 [SCOI2009]windy数 题目大意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和 ...

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

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

  7. [洛谷P2657][SCOI2009]windy数

    题目大意:不含前导零且相邻两个数字之差至少为$2$的正整数被称为$windy$数.问$[A, B]$内有多少个$windy$数? 题解:$f_{i, j}$表示数有$i$位,最高位为$j$(可能为$0 ...

  8. Luogu P2657 [SCOI2009]windy数

    一道比较基础的数位DP,还是挺套路的. 首先看题,发现这个性质和数的大小无关,因此我们可以直接数位DP,经典起手式: \(f[a,b]=f(b)-f(a-1)\) 然后考虑如何求解\(f(x)\).我 ...

  9. P2657 [SCOI2009]windy数 数位dp

    数位dp之前完全没接触过,所以NOIP之前搞一下.数位dp就是一种dp,emm……用来求解区间[L,R]内满足某个性质的数的个数,且这个性质与数的大小无关. 在这道题中,dp[i][j]代表考虑了i位 ...

  10. 题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP

    BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...

随机推荐

  1. Vue3 与依赖注入

    Vue3 与依赖注入 本文写于 2021 年 2 月 19 日 在 React 中,我们可以通过 context 与 useContext 实现单例.注入--等诸多特性. 详细请看上一篇文章:如何利用 ...

  2. linux篇-linux下ffmpeg安装

    1最近自己搭建的公司服务端转化视频不可以,我想应该是ffmpeg的问题,头痛 准备这两个源码包 2安装,先解压 ffmpeg-4.1.4.tar.bz2 yasm-1.3.0.tar.gz 3先安装y ...

  3. [CF1073G]LCP问题

    题意:给一个长n的字符串S,q组询问,每组给两个集合A,B.求集合A中的点和集合B中的点所有组合情况的lcp的和. 思路: 好像比较常规,可是代码能力差还是调了1.5h.主要还是虚树板子不熟(加入的时 ...

  4. 【原创】项目五w1r3s.v1.0

    实战记录 1.nmap信息枚举 1)C段扫描 nmap -sP 192.168.186.0/24 2)扫描全端口信息 nmap -p- 192.168.186.143 3)扫描版本信息 nmap -p ...

  5. 用STM32玩OLED(显示文字、图片、动图gif等)

    目录 用STM32玩OLED(显示文字.图片.动图gif等) 1. 显示字符串 2. 显示中文 3. 显示图片 4. 显示动图 5. 总结测试 用STM32玩OLED(显示文字.图片.动图gif等) ...

  6. FastDFS 技术整理

    1.FastDFS 1.1.了解基础概念 1.1.1.什么是分布式文件系统? 全称:Distributed File System,即简称的DFS 这个东西可以是一个软件,也可以说是服务器,和tomc ...

  7. CabloyJS也有工作流引擎了,是你想要的吗?

    前言 众所周知,NodeJS作为后端开发语言和运行环境,样样都好,就差一个NodeJS工作流引擎.CabloyJS 4.0重点开发了NodeJS工作流引擎,并作为内置的基础核心模块,近一步拓展了Nod ...

  8. Mac Book安装Windows发烫的问题

    Mac Book安装Windows后,电脑发烫,风扇一直高速旋转.针对此问题百度搜索了一下, 大多数人说更改电源选项,由"平衡"模式改为"节能"模式,亲身体验了 ...

  9. 华为云Stack首席架构师:打造“称手”的数字化工具,答好政企IT数字化转型这道必选题

    摘要:数字化转型是一号位工程,数字化的工具本身就是企业的核心竞争力. 本文分享自华为云社区<华为云Stack首席架构师:打造"称手"的数字化工具,答好政企IT数字化转型这道必 ...

  10. Django——表单

    一.前言 看了下教程,以为表单很简单呢,结果搞了一两个钟才弄懂,哈哈哈,所以说不要小瞧每一件事. 先说明下HTTP请求: HTTP协议以"请求-回复"的方式工作.客户发送请求时,可 ...