BZOJ_1026_[SCOI2009]windy数_数位DP

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

学一下数位DP。

f[i][j]表示i位数以j开头的windy数个数。转移有f[i+1][k]+=f[i][j](abs(j-k)>=2)

答案转成[1~R]-[1~L-1]之后按位枚举,每次枚举到当前位上的数减1。

注意:

1.枚举到两位差2以内时停止枚举。

2.答案要加上位数比他小的所有windy数。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int f[15][15],a,b;
int c[15],d[15];
int sol(int x){
int num=x,cnt=0,ans=0;
while(num){
c[++cnt]=num%10;
num/=10;
}for(int i=1;i<=cnt;i++)d[i]=c[cnt-i+1];
for(int i=1;i<cnt;i++)
for(int j=1;j<=9;j++)ans+=f[i][j];
for(int i=1;i<d[1];i++)ans+=f[cnt][i];
for(int i=2;i<=cnt;i++){
for(int j=0;j<d[i];j++){
if(d[i-1]-j<2&&j-d[i-1]<2)continue;
ans+=f[cnt-i+1][j];
}
if(d[i-1]-d[i]<2&&d[i]-d[i-1]<2)break;
}
return ans;
}
int main(){
for(int i=0;i<=9;i++)f[1][i]=1;
for(int i=2;i<=10;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
if(k-j<2&&j-k<2)continue;
f[i][j]+=f[i-1][k];
}
}
}
scanf("%d%d",&a,&b);
//sol(18717);
printf("%d\n",sol(b+1)-sol(a));
}
/*
18716
38434 5178*/

BZOJ_1026_[SCOI2009]windy数_数位DP的更多相关文章

  1. BZOJ_1026_[SCOI2009]_windy数_(数位dp)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1026 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为wi ...

  2. [bzoj1026][SCOI2009]windy数_数位dp

    windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...

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

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

  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. 1026: [SCOI2009]windy数(数位dp)

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

  7. BZOJ1026 SCOI2009 windy数 【数位DP】

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

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 我果然很弱啊... 考虑数位dp.枚举每一位,然后限制下一位即可. 一定要注意啊!在dfs的时 ...

  9. 1026. [SCOI2009]windy数【数位DP】

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

随机推荐

  1. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  2. JS(作用域和闭包)

    1.对变量提升的理解 1.变量定义(上下文) 2.函数声明 2.说明 this 几种不同的使用场景 常见用法 1.作为构造函数执行 2.作为对象属性执行 3.作为普通函数执行(this === win ...

  3. Thread.yield和join方法

    参考:http://blog.csdn.net/dabing69221/article/details/17426953 一. Thread.yield( )方法: 使当前线程从执行状态(运行状态)变 ...

  4. JS(API-日期和math)

    JS(日期和math) 问题1.获取 2017-06-10 结果: 1.dt.getMonth() + 1 是真实的月份 2.month = '0' + month 中,month 是数字(numbe ...

  5. DDD学习笔记1——分层架构

    新旧架构对比图: DDD中的基础设施层包括数据持久化(ORM数据访问),IoC容器实现,AOP实现(安全,日志记录,缓存等) Repository的接口通常放在领域层,具体实现在基础设施层 旧架构的业 ...

  6. zxg项目准备的技术资料

    bootstrap工具大全:http://www.w3cplus.com/source/the-best-bootStrap-resources.html ubuntu-安装aptana3  http ...

  7. ubuntu导入公钥的方法

    导入公钥的办法: #方法1: gpg --keyserver subkeys.pgp.NET --recv 6E871C4A881574DEgpg --export --armor 6E871C4A8 ...

  8. GPU Accelerated Computing with Python

    https://developer.nvidia.com/how-to-cuda-Python python is one of the fastest growing and most popula ...

  9. js如何读写txt文件?(曲线救国篇)

    .emmm,不存在的.做不到的. 但是,你可以继续往下阅读,或许能实现你想要的功能. 前言:一般我们需要用js来实现文件读写,都是一些比较小的,离线的应用(因为如果可以联网,什么json什么db都任意 ...

  10. NewLife.Net——网络压测单机1.88亿tps

    NewLife.Net压力测试,峰值4.2Gbps,50万pps,消息大小24字节,消息处理速度1.88亿tps! 共集合20台高配ECS参与测试,主服务器带宽6Gbps.100万pps,16核心64 ...