BZOJ 1026:windy数(数位DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1026
1026: [SCOI2009]windy数
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 5561 Solved: 2493
[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 。
题意比较简单,这里有点蛋疼的是第一个样例我一开始看不懂,然后问了别人才知道例如第一个样例 1 10 的答案是 1 - 9。
所以可能最高位如果前面都是零的话,那么它可以任意选择一个数(0 - 位上限)
如果最高位前面不全都是零的话,那么它就要按照规则即和前一位相差2来取。
还是太弱了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 35
//long long dp[N][15][2][2];
long long dp[N][][];
int bit[N];
/*
zero判断前面是不是全都是 0,
1的话说明前面没有前导零,有值
0的话说明前面没有值,都是零
*/
//我一开始的写法
//long long dfs(int pos, int pre, int st, int zero, int flag)
//{
// if( !pos ) return st;
// if( zero && !flag && dp[pos][pre][st][zero] != -1 ) return dp[pos][pre][st][zero];
//
// long long ans = 0;
// int u = flag ? bit[pos] : 9;
//
// if( zero == 0 ){
// for(int i = 0; i <= u; i++){
// ans += dfs(pos - 1, i, i == 0 ? 0 : 1, i == 0 ? 0 : 1, flag && i==u);
// }
// }
// else{
// for(int i = 0; i <= u; i++){
// if( abs(pre - i) >= 2 ){
// ans += dfs(pos - 1, i, 1, 1, flag && i==u);
// }
// }
// }
//
// if( zero && !flag ) dp[pos][pre][st][zero] = ans;
// return ans;
//}
//看了别人的写法,简化了很多
long long dfs(int pos, int pre, int zero, int flag)
{
if( !pos ) return ;
if( zero && !flag && ~dp[pos][pre][zero] ) return dp[pos][pre][zero]; long long ans = ;
int u = flag ? bit[pos] : ; for(int i = ; i <= u; i++){
if( !zero || abs(pre - i) >= )
/*
例如第一个样例 1 10 的答案是 1 - 9
所以可能最高位如果前面都是零的话,那么它可以任意选择一个数(0 - u)
如果最高位前面不行全都是零的话,那么它就要按照规则即和前一位相差2来取
这一题的没有前导零还有第一个样例搞得我很迷糊。我还是太弱了
*/
ans += dfs(pos - , i, i || zero, flag && i==u);
}
if( !flag ) dp[pos][pre][zero] = ans;
return ans;
} long long solve(long long x)
{
int l = ;
while(x>){
bit[++l] = x % ;
x /= ;
}
// return dfs(l, 0, 0, 0, 1);
return dfs(l, , , );
} int main()
{
long long a, b;
cin >> a >> b;
memset(dp, -, sizeof(dp));
if(a > b) swap(a, b);
// cout << solve(b) << " " << solve(a-1) << endl;
cout << solve(b) - solve(a-) << endl;
return ;
}
BZOJ 1026:windy数(数位DP)的更多相关文章
- BZOJ 1026 windy数 (数位DP)
题意 区间[A,B]上,总共有多少个不含前导零且相邻两个数字之差至少为2的正整数? 思路 状态设计非常简单,只需要pos.limit和一个前驱数pre就可以了,每次枚举当前位时判断是否与上一位相差2即 ...
- BZOJ 1016 Windy 数 | 数位DP
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1026 题解: f[i][j][1/0]表示枚举到第i位,这位开头是j,当前的数大于(1)或小 ...
- [bzoj 1026]windy数(数位DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...
- bzoj 1026 [SCOI2009]windy数 数位dp
1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- BZOJ 1026 windy数【数位DP】
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 10142 Solved: 4712[Submit][St ...
- bzoj 1026 [ SCOI2009 ] windy数 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 蛮简单的数位DP,预处理 f[i][j] 表示 i 位数,以 j 开头的 windy ...
- bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记
数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...
- bzoj 1026 [SCOI2009]windy数——数位dp水题
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 迷恋上用dfs写数位dp了. #include<iostream> #in ...
- 【BZOJ-1026】windy数 数位DP
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5230 Solved: 2353[Submit][Sta ...
- BZOJ 1026 windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
随机推荐
- WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮
原文:WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮 在边框中加入一些元素,在应用程序的界面设计中,已经开始流行起来.特别是在浏览器(Crome,IE,Firefox,Opera)中都有应用. ...
- js css加时间戳
为了强制更新文件,取消浏览器缓存 <link rel="stylesheet" href="~/XXX.css?time='+new Date().getTime( ...
- WPF编游戏系列 之四 用户控件
原文:WPF编游戏系列 之四 用户控件 在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2. ...
- Entity相互关系
查看 1.图表(.edmx) Model First可以2.代码 内部包含对方(回溯) 1:1 1 2 1:N 3 4 N:M 5 6
- WPF 用代码调用dynamic resource动态更改背景 - CSDN博客
原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...
- css3的calc() css3的百分比减宽,减高,加,乘,除,适合用于后台的排版定位
css3的calc() css3的百分比减宽,减高,加,乘,除,适合用于后台的排版定位 浏览器支持IE9+.FF4.0+.Chrome19+.Safari6+ calc()语法非常简单,就像我们小时候 ...
- wpf屏蔽快捷键alt+space,alt+F4
/// <summary> /// 阻止 alt+f4和alt+space 按键 /// </summary> /// <par ...
- 加载dll、lib库(例子的代码很全)
是关于如何加载dll或lib库的.可以看这篇bog Qt调用dll中的功能函数点击打开链接 **************************************************** ...
- asp.net core2.0中网站发布的时候,视图文件不被打包成dll
项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...
- QT_NO_CAST_FROM_ASCII这个宏的,禁用一切来自双引号字符串字面量传入QString(有2种解决方法)
这两天制作了两个Qt Creator增强套装的两个插件,其实也是非常简单的,但是其实花了我超过四天的时间,为什么呢?因为我之前很长一段时间都是在Linux下开发的,一切安好,没有任何问题,但是到了Wi ...