bzoj千题计划117:bzoj1026: [SCOI2009]windy数
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数的更多相关文章
- BZOJ1026 SCOI2009 windy数 【数位DP】
BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...
- bzoj1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8203 Solved: 3687[Submit][Sta ...
- 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...
- bzoj1026: [SCOI2009]windy数(传说你是数位DP)
1026: [SCOI2009]windy数 题目:传送门 题解: 其实之前年少无知的时候好像A过...表示当时并不知道什么数位DP 今天回来深造一发... 其实如果对这个算法稍有了解...看到这题的 ...
- BZOJ1026: [SCOI2009]windy数[数位DP]
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6346 Solved: 2831[Submit][Sta ...
- 【数位DP】bzoj1026: [SCOI2009]windy数
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4163 Solved: 1864[Submit][Sta ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- BZOJ1026: [SCOI2009]windy数
传送门 md直接wa了78次,身败名裂 没学过数位DP硬搞了一道数位DP的模板题,感觉非常的愉(sha)悦(cha). 二分转化枚举思想.首先DP预处理出来$f[i][j]$表示有$i$位且第$i$位 ...
- [bzoj1026][SCOI2009]windy数_数位dp
windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...
随机推荐
- HTML和CSS <h1> --2-- <h1>
认识html文件基本结构 这一节中我们来学习html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> <bo ...
- Teamwork(The first day of the team)
今天是第一次的小组讨论,我们主要是分析了我们的大概方向及大概功能及相应的分工.其实具体也还没有确定下来,只是大概的说了一下,确定了master为杨灵超同学.下面用图片记录我们这一天的工作内容(杨灵超V ...
- SQL Server 无法连接到本地服务器
未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接: 解决办法: 在服务中启动SQL Server (MSSQLSERVER)这个服务.
- mac上查找nginx安装位置
在终端输入: nginx -V 查看nginx版本及安装的本地位置 ngxin -v 查看nginx版本(此方法依然可以检测是否安装某一软件,如git,hg等)
- 课堂作业:alpha发布点评
1. 新蜂 项目:游戏俄罗斯方块 基础玩法已实现,部分功能尚不完备,总的来说已经很出色了.不过希望下降加速那部分可以优化一下,不要按住↓加速,而是按一下就使当前方块加速下落至底部就好了. 2. 天 ...
- #Leetcode# 451. Sort Characters By Frequency
https://leetcode.com/problems/sort-characters-by-frequency/ Given a string, sort it in decreasing or ...
- Idea安装Python插件并配置Python SDK
第一步:在help/about中查看IDEA版本,作者IDEA 15.0.2 第二步:在http://plugins.jetbrains.com/plugin/631中下载python-143.116 ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- delphi的ActionToolBar控件的使用 [问题点数:50分]
delphi那些默认图标在哪里就是那些Text,Label,Checkbox,显示在palette上面的那些图标. 上面的按钮是在ActionManager中添加的,让后拖到ActionToolBar ...
- Python中用dict统计列表中元素出现的次数
01 Python增加元素,不像其他语言使用现实的操作接口,只需要dict[1]=3,如果字典中不存在1,则直接新增元素键值对(1,3),如果存在则替换键1为3. if key in dict:判断出 ...