数位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. 机器学习实战笔记-5-Logistic回归

    Logistic回归 优缺点 适用范围 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 适用于:数值型和标称型数据. 仅用于二分类 原理: 每个特征都乘以一个回归系数> ...

  2. JS中设置input的type="radio"默认选中

    html: <input id="Radio1" type="radio" value="男" name="st_Sex&q ...

  3. java8新特性-简介

    一.主要内容 :其中最为核心的为lambda 表达式 与 Stream API lambda表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期API ...

  4. 用vue.js写的一个瀑布流的组件

    用vue.js写的一个瀑布流的组件:https://segmentfault.com/a/1190000010741319 https://www.jianshu.com/p/db3cadc03402

  5. mysql中列转行

    通过group_concat()函数来实现 select group_concat(name) from table group by type select group_concat(name se ...

  6. Java 8实战之读书笔记五:超越Java 8

    四.超越Java 8 第13章 函数式的思考 下面是这一章中你应该掌握的关键概念.      从长远看,减少共享的可变数据结构能帮助你降低维护和调试程序的代价.      函数式编程支持无副作用的 ...

  7. Git相关命令整理

    git config --global user.name  //配置姓名git config --global user.email  //配置邮箱git config --list  //查看配置 ...

  8. WEEX-EROS开发小笔记

    本文是作者之前刚接触移动端跨平台开发,使用weex-eros开发项目平日里记下来的一些笔记,分享出来方便为新手解惑,weex-eros是weex的一套解决方法,使用vue语法糖,对于前端开发者来说可以 ...

  9. UIWindow与UIView

    UIView与UIWindow * 一般应用程序只有一个UIWindow对象.所有的控件都是在UIWindow上展现的.每个UIView对象都有一个window属性,表示当前view显示在哪个窗体上. ...

  10. 微信小程序(14)--上传图片公用组件(父子传参)

    这周整理了一下做微信小程序页面时遇到的一些问题,先说说常见的上传图片吧. 上传图片公用组件 首先要了解的是父子传参. 1.A组件为父组件,B组件为子组件,以下是A组件向B组件传参: 在A组件的json ...