数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写)

数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件

只要出题人不刻意去卡多一个$log$什么的(当然${log_2{(long long)}}$就有$60$)

方法显然还是非常丰富的 找一些自己写得比较顺的方法会了就行

------------------------------------------------------------------------------------------------------------------------------

比如windy数这题 我的做法便是先从低位到高位先预处理出有x位 最高位为y时有多少满足题意的数

然后再从高位到低位扫一遍 分最高的几位是否与限制的最高的几位相等去分情况讨论即可

#include <bits/stdc++.h>
using namespace std;
int f[][],lim[];
void prepare()
{
for(int i=;i<=;++i)
f[][i]=;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
for(int k=;k<=;++k)
if(abs(j-k)>=)
f[i][j]+=f[i-][k];
}
int calc(int x)
{
if(!x)return ;
int top=,re=;
while(x)
{
lim[++top]=x%;
x/=;
}
for(int i=top;i;--i)
{
if(top-i>=&&abs(lim[i+]-lim[i+])<=)
break;
for(int j=+(i==top);j<lim[i]+(i==);++j)
if(i==top||abs(j-lim[i+])>=)
re+=f[i][j];
}
for(int i=top-;i;--i)
for(int j=;j<=;++j)
re+=f[i][j];
return re;
}
int main()
{
int a,b;
prepare();
scanf("%d%d",&a,&b);
printf("%d",calc(b)-calc(a-));
return ;
}

不过这题限制条件只是和相邻的位有关 后面应该会遇到不少限制条件更难表示与讨论的题目

bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记的更多相关文章

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

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

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

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

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

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

  4. bzoj 1026 [SCOI2009]windy数(数位DP)

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

  5. BZOJ 1026: [SCOI2009]windy数( dp )

    dp..dp(x, t) 表示共x位, 第x位为t有多少个windy数. 对答案差分, 我们只需统计1 ~ l-1和1 ~ r的windy数数量. 考虑如何计算[1, n]的答案 : 从最高位到最低位 ...

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

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

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

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

  8. BZOJ 1026: [SCOI2009]windy数 【数位dp】

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

  9. bzoj 1026: [SCOI2009]windy数【数位dp】

    忘记limit不能记WA了一发-- 典型数位dp,变成work(r)-work(l-1),然后dfs的时候记录w当前位置,la上一个数选的什么,lm当前位是否有上限,ok当前位是否可以不考虑差大于等于 ...

随机推荐

  1. Java稀疏数组

    一.概述 1.概念 2.处理方法 3.示例 原数组如下: 转换为稀疏数组如下: 二.代码 1.主方法 @Testpublic void SparseTest() { // 创建一个原始的二维数组 11 ...

  2. Pandas的拼接操作

    pandas的拼接操作 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join import pandas as pd import n ...

  3. php cookie session 深究一下

    当一个用户用浏览器访问web(www.96net.com.cn)时候,若服务器开启session_start() 服务器tmp临时目录 自动生成session_id 并放回给创建一个cookie 保存 ...

  4. Centos7.6替换自带的jre安装jdk

    Centos7.6自带jre 1.8,可以作为java运行环境.但如果要编译java程序那就需要jdk,以下介绍如何把自带的jre卸掉并安装jdk 首先要卸载自带的jre PS:由于不同版本的操作系统 ...

  5. E Easy problem

    链接:https://ac.nowcoder.com/acm/contest/338/E来源:牛客网 Zghh likes number, but he doesn't like writing pr ...

  6. c#模板化生成接口

    最近打算做这样一个事情,一个桌面系统项目既可以一体化部署,作为一个软件一个进程部署,也可以把业务服务化部署. 那一般意味着我们要完全写2套东西,一套是直接UI调用业务,一套是Ui调用RPC.这样比较多 ...

  7. js事件循环了解一下

    https://segmentfault.com/a/1190000019900532

  8. Linux就该这么学05学习笔记

    参考链接:https://www.linuxprobe.com/chapter-05.html   1.用户身份和能力 用户 管理员UID为0:系统的管理员用户. 系统用户UID为1-999: Lin ...

  9. linux--mysql的安装与配置

    linux centos下,mysql安装有三种方式:二进制tar包安装,rpm安装,yum安装(最简单) 查看有没有安装过: yum list installed mysql* rpm -qa | ...

  10. 《Spring Boot实战》笔记 (六章)

    6.1 基本配置 ........................................................................................... ...