bzoj 1026 //1026: [SCOI2009]windy数
bzoj 1026 //1026: [SCOI2009]windy数 //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1026
//在线测评地址https://www.luogu.org/problem/P2657
更多题解,详见https://blog.csdn.net/mrcrack/article/details/90228694BZOJ刷题记录
方法一:数位dp 模板 记忆化搜索
Accepted | 824 kb | 60 ms | C++/Edit | 1086 B |
//1026: [SCOI2009]windy数
//在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1026
//在线测评地址https://www.luogu.org/problem/P2657
//看了数据范围 1 <= A <= B <= 2000000000 ,long long比较稳妥
//枚举算法容易编写,AC不了,是肯定的。2019-11-9 19:44
//先解决样例
//编写完枚举算法,测试了样例,才发现没有读懂题意,什么是windy数,要是题目能举例说明就好了。
//样例2,很快弄懂,
/*
25~31共7个
35~42共8个
46~50共5个
7+8+5=20个
*/
//样例1,始终没弄懂。
//在想,要么样例1,就是作为特例给出,1-9之间9个数,都是特殊的windy数.2019-11-9 20:08
//数位dp入门,此文https://www.luogu.org/blog/virus2017/shuweidp可以读读。2019-11-10 18:43
//此文https://www.luogu.org/problemnew/solution/P2657 作者: Mathison 更新时间: 2018-09-27 16:25代码写得不错
//凭着记忆,硬写,错误不断,不过,也就逐渐有了感觉。
//样例通过,提交AC.2019-11-12 20:42
#include <stdio.h>
#include <string.h>
#define LL long long
int L,R;
LL ans,dp[15][15];
int a[15],len;
int myabs(int x){
return x>=0?x:-x;
}
LL dfs(int pos,int pre,int lead,int limit){
LL ret=0;
int res,i;
if(pos>len)return 1;//此处错写成if(pos<len)return 1;//搜完,返回1,因该搜索可行
if(!limit&&dp[pos][pre]!=-1)return dp[pos][pre];
res=limit?a[len-pos+1]:9;//此处错写成res=limit?a[len-pos-1]:9;
for(i=0;i<=res;i++){
if(myabs(i-pre)<2)continue;
if(lead&&!i)ret+=dfs(pos+1,-2,1,limit&&i==res);//前导0
else ret+=dfs(pos+1,i,0,limit&&i==res);//此处错写成if(!lead)ret+=dfs(pos+1,i,0,limit&&i==res);
}
if(!limit&&!lead)dp[pos][pre]=ret;//此处错写成if(!limit&&!lead)ret=dp[pos][pre];
return ret;
}
void part(int x){
ans=0,len=0;
while(x)a[++len]=x%10,x/=10;
memset(dp,-1,sizeof(dp));
ans=dfs(1,-2,1,1);
}
int main(){
LL mx,mn;
scanf("%d%d",&L,&R);
part(L-1),mn=ans;
part(R),mx=ans;
printf("%lld\n",mx-mn);
return 0;
}
bzoj 1026 //1026: [SCOI2009]windy数相关推荐
- BZOJ 1026 [SCOI2009]windy数
1026: [SCOI2009]windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间 ...
- bzoj:1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7982 Solved: 3593 Descriptio ...
- bzoj 1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7688 Solved: 3470 [Submit][S ...
- [SCOI2009]windy数
[SCOI2009]windy数 BZOJ luogu 数位dp入门题 复杂度:\(O(11×10×10)\) 详细见注释 #define ll long long #include<bits/ ...
- P2657 [SCOI2009]windy数
P2657 [SCOI2009]windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B ...
- P2657 [SCOI2009] windy 数(数位DP)
题目链接:[SCOI2009] windy 数 - 洛谷 这是一道需要考虑前导0的数位DP题,为什么需要考虑前导0呢?其实原因很简单,因为有条件限制我们相邻两个数的差,所以我们在进行数位DP时必须把前 ...
- 洛谷 P2657 [SCOI2009] windy数 数位DP
大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...
- 洛谷P2657 [SCOI2009]windy数
洛谷P2657 [SCOI2009]windy数 本题是一道数位DP 看程序应该能看懂 中心思想:把一个数拆成每一位来处理 代码: #include<bits/stdc++.h> usin ...
- LG-P2657 [SCOI2009]windy数
P2657 [SCOI2009]windy数 题目链接 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间, ...
最新文章
- 基于全景图像与激光点云配准的彩色点云生成算法(2014年文章)
- pptxgenjs一个月深度使用感受(未完待续……)
- RichTextBox粘贴两次以及去掉粘贴内容的格式问题
- 使用Keras进行深度学习:(二)CNN讲解及实践
- Android-上传图片(二)_HttpClient
- Python实战2 - 200行Python代码实现2048(控制台)
- WebClient上传文件至服务器和下载服务器文件至客户端
- 修改Sql Server 2000数据库名称
- python是什么课程-请问自学 Python 有必要买课程吗?
- chown r mysql var_Mysql 常用命令
- Python_继承_构造函数
- 湖北省大数据发展行动计划(2016-2020年)
- 经典语录大全微信小程序源码下载多种分类语录多流量主模式
- 一步一步SharePoint 2007之一:安装SharePoint
- 绝对简单易学的PHP入门教程
- 解决问题multiply defined
- mysql求月平均_mysql求平均值
- 众多mock工具,这一次我选对了
- 猴子吃桃问题 (15分) (递归)
- CST仿真指导 | 如何构建个性化的用户界面
热门文章
- 《Photoshop+Lightroom数码摄影后期处理经典教程》—第1章1.5节准备将Lightroom和Photoshop结合起来...
- 如何使用deeptools处理BAM数据
- 12月小报|读小报,涨知识
- 游戏突发随机事件设计
- maya加载不了arnold的mtoa可能是这个低级错误!
- 笔记本电脑没有鼠标怎么右键_没有鼠标怎么办?
- 32python腾讯位置大数据2.0版本成功输出北京位置数据(续接上2019年8月21日停止服务的内容)
- SAP FICO 第五节 物料分类账ML配置及应用
- mac svn 服务器及客户端
- Macbook Pro 外接显示器后,鼠标滑动延迟