【题解】[SCOI]windy数
题目大意:求给定一个区间内满足每一位的数相差大于\(2\)且没有前导零的数的个数。
\(\text{Solution:}\)
我们可以按照数位\(dp\).设状态为当前要\(dp\)第\(pos\)位,上一位填的是\(pre,\)当前是不是顶到最大值\((fg)\),当前是不是有前导零。
那么我们可以获得一个转移:\(dp[pos][pre][fg][zero]\)由它的后面一位\(dp[pos-1][pre'][fg'][zero']\)转移而来。转移的时候,我们枚举可行的数,并改变相应状态即可。
实现上我们可以\(dfs\).当当前位置处理完了就返回\(1\)(因为要计数),枚举的时候把所有不可能状态去掉即可。
初值之所以设前一位填的是\(11\)是因为这样不论是哪一个数字与它的差都会大于\(2\),这才能保证第一位哪个数都可以填。
#include<bits/stdc++.h>
using namespace std;
int L,R,a[2000],dp[20][20][2][2];
int dfs(int pos,int pre,int fg,int zero){
if(!pos)return 1;
if(dp[pos][pre][fg][zero])return dp[pos][pre][fg][zero];
int res=0;
for(int i=0;i<=9;++i){
if((i<=a[pos]||!fg)&&(abs(i-pre)>=2||zero)){
res+=dfs(pos-1,i,fg&&(i==a[pos]),zero&&(!i));
}
}
dp[pos][pre][fg][zero]=res;
return res;
}
int calc(int num){
int cnt=0;
memset(dp,0,sizeof(dp));
while(num){
a[++cnt]=num%10;
num/=10;
}
return dfs(cnt,11,1,1);
}
int main(){
cin>>L>>R;
cout<<calc(R)-calc(L-1)<<endl;
//复杂度是dp数组大小*for循环转移的大小
return 0;
}
【题解】[SCOI]windy数的更多相关文章
- 「题解」:windy数
问题: windy数 时间限制: 1 Sec 内存限制: 512 MB 题面 题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 的正整数被称为 Windy 数. ...
- BZOJ1026:[SCOI2009]windy数——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2 ...
- 题解 P2657 【[SCOI2009]windy数】
感觉数位DP有点弱,强化一下... 这道题是一道比较裸的数位DP. 我们用\(dp[i][j]\)表示长度为\(i\)最高位为\(j\)的windy数有多少个,状态转移方程为\(dp[i][j]=\s ...
- C++ 洛谷 P2657 [SCOI2009]windy数 题解
P2657 [SCOI2009]windy数 同步数位DP 这题还是很简单的啦(差点没做出来 个位打表大佬请离开(包括记搜),我这里讲的是DP!!! 首先Cal(b+1)-Cal(a),大家都懂吧(算 ...
- BZOJ 1026 【SCOI2009】 windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? I ...
- bzoj 1026 [SCOI2009]windy数 数位dp
1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- windy数(数位DP)
windy数Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:165888KB 64bit I ...
- bzoj1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8203 Solved: 3687[Submit][Sta ...
- 一本通1587【例 3】Windy 数
1587: [例 3]Windy 数 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 原题来自:SCOI 2009 Windy 定义了一种 Windy 数:不含前 ...
随机推荐
- new Map()详细介绍与对比
说明: Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现.如果你需要“键值对”的数据结构,Map比Object更合适.它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串, ...
- Application.LoadLevel
Unity在场景切换之间清理下内存 http://www.cnblogs.com/dongz888/p/4920714.html
- akka-streams - 从应用角度学习:basic stream parts
实际上很早就写了一系列关于akka-streams的博客.但那个时候纯粹是为了了解akka而去学习的,主要是从了解akka-streams的原理为出发点.因为akka-streams是akka系列工具 ...
- python中的一些内置函数
1.布尔类型 2.求和sum 3.取全局变量和局部变量 4.ascii码和字符集 chr().ord() 5.看某个功能下有哪些方法 help(x).dir(x) 6.exec执行python代码 7 ...
- python 3 字符串
字符串中单引号与双引号无差别 三单引号与三双引号 三引号允许一个字符串跨多行,字符串中可以包含换行符等特殊字符 字符串使用索引的方法来读取,正向从0开始计数,反向从-1开始计数 反向索引 字符串切片 ...
- 送命题:讲一讲Mybatis插件的原理及如何实现?
持续原创输出,点击上方蓝字关注我吧 目录 前言 环境配置 什么是插件? 如何自定义插件? 举个栗子 用到哪些注解? 如何注入Mybatis? 测试 插件原理分析 如何生成代理对象? 如何执行? 总结 ...
- NX二次开发-NX访问MySQL数据库(增删改查)
版本:NX11+VS2013+MySQL5.6(x64)+SQLyog 1.新建一个NX项目(多字节) 2.设置VC++目录(调用MySQL的头文件,dll和lib库文件) 3.设置番茄助手 然后重启 ...
- Arnold变换(猫脸变换)
Arnold变换是Arnold在遍历理论研究中提出的一种变换.由于Arnold本人最初对一张猫的图片进行了此种变换,因此它又被称为猫脸变换.Arnold变换可以对图像进行置乱,使得原本有意义的图像变成 ...
- python库的基本情况
主要三个库 time()函数获取浮点数 ctime()函数可以获取时间,还可以以一种可读的方式表示时间 gmtime()函数
- Spring boot +Thymeleaf 搭建springweb
对接天猫精灵的时候需要有网关服务器方提供几个页面,服务器已经有了,spring boot的 纯后台的,就加了Thymeleaf jar包添加几个页面跳转 maven配置 <!-- 引入thy ...