http://www.lydsy.com/JudgeOnline/problem.php?id=1026

数位DP

如果前一位填的是0,

0是前导0,下一位可以随便填

0不是前导0,下一位不能填1

为避免这种情况

枚举位数,强制不出现前导0

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int dp[][]; int a[]; int LEN; int dfs(int dep,int num,bool lim)
{
if(!lim && dp[dep][num]!=-) return dp[dep][num];
if(!dep) return ;
int up= lim ? a[dep] : ,tmp=;
for(int i=;i<=up;++i)
{
if(dep==LEN && !i) continue;
if(abs(i-num)<) continue;
tmp+=dfs(dep-,i,lim && i==up);
}
if(!lim) dp[dep][num]=tmp;
return tmp;
} int solve(int n)
{
if(!n) return ;
int len=;
while(n)
{
a[++len]=n%;
n/=;
}
int sum=;
for(int i=;i<len;++i)
{
LEN=i;
sum+=dfs(i,,);
}
LEN=len;
sum+=dfs(len,,);
return sum;
} int main()
{
int a,b;
scanf("%d%d",&a,&b);
memset(dp,-,sizeof(dp));
printf("%d\n",solve(b)-solve(a-));
}

或者是记录有无前导零这个状态

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int dp[][][]; int a[]; int LEN; int dfs(int dep,int num,bool lim,bool zero)
{
if(!lim && dp[dep][num][zero]!=-) return dp[dep][num][zero];
if(!dep) return !zero;
int up= lim ? a[dep] : ,tmp=;
for(int i=;i<=up;++i)
{
if(abs(i-num)< && !zero) continue;
tmp+=dfs(dep-,i,lim && i==up,zero && !i);
}
if(!lim) dp[dep][num][zero]=tmp;
return tmp;
} int solve(int n)
{
if(!n) return ;
int len=;
while(n)
{
a[++len]=n%;
n/=;
}
return dfs(len,,,);
} int main()
{
int a,b;
scanf("%d%d",&a,&b);
memset(dp,-,sizeof(dp));
printf("%d\n",solve(b)-solve(a-));
}

1026: [SCOI2009]windy数

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 8771  Solved: 3959
[Submit][Status][Discuss]

Description

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

Input

  包含两个整数,A B。

Output

  一个整数

Sample Input

【输入样例一】
1 10
【输入样例二】
25 50

Sample Output

【输出样例一】
9
【输出样例二】
20

HINT

【数据规模和约定】

100%的数据,满足 1 <= A <= B <= 2000000000 。

bzoj千题计划117:bzoj1026: [SCOI2009]windy数的更多相关文章

  1. BZOJ1026 SCOI2009 windy数 【数位DP】

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

  2. bzoj1026: [SCOI2009]windy数(数位dp)

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

  3. 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...

  4. bzoj1026: [SCOI2009]windy数(传说你是数位DP)

    1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...

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

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

  6. 【数位DP】bzoj1026: [SCOI2009]windy数

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

  7. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  8. BZOJ1026: [SCOI2009]windy数

    传送门 md直接wa了78次,身败名裂 没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha). 二分转化枚举思想.首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位 ...

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

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

随机推荐

  1. 软工1816 · Beta冲刺(5/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 推进后端完成安卓端接口的开发 在测试中发现返回地图接口存在错误(待修复) 推进 ...

  2. Enterprise Library 3.1 参考源码索引

    http://www.projky.com/entlib/3.1/Microsoft/Practices/EnterpriseLibrary/AppSettings/Configuration/Des ...

  3. C++判断char*的指向

    char *a = "Peter"; char b[] = "Peter"; ]; strcpy_s(c, , "Peter"); 这里a指 ...

  4. 高可用集群(crmsh详解)http://www.it165.net/admin/html/201404/2869.html

    crmsh是pacemaker的命令行接口工具,执行help命令,可以查看shell接口所有的一级命令和二级命令,使用cd 可以切换到二级子命令的目录中去,可以执行二级子命令 在集群中的资源有四类:p ...

  5. IT行业的个人见解

    IT这个行业是近代历史上的新新行业,它的就业前景是非常的好的,就业率高,但是这个行业的需求人才精英不是那些半桶水的所谓IT男.我现在学习的是计算机专业中的软件工程目标是成为一名合格的软件工程师,软件工 ...

  6. modify headers插件的使用

    Modity headers是firefox浏览器的一个插件,作用是改变http请求的IP地址 (一)在firefox中添加该插件 步骤一:打开firefox浏览器,打开地址: https://add ...

  7. dotTrace快速帮助你定位C#代码的性能瓶颈

    dotTrace 1.     问题描述 IIS发布的接口运行一段时间后变的很慢,重启IIS连接池后问题得到解决,但是运行一段时间后再次出现变慢的问题 2.     问题原因 程序中有读取xml文件的 ...

  8. redis批量删除key 命令

    redis-cli -n 数据库编号 -a 密码 keys "过滤条件" | xargs redis-cli -n 数据库编号 -a 密码 del Demo: redis-cli ...

  9. intel 的架构图

    第一代: 第二代 第三代 以及对比

  10. 对CAS机制的理解(二)

    一.Java当中CAS的底层实现首先看看AtomicInteger的源码,AtomicInteger中常用的自增方法 incrementAndGet: public final int increme ...