Link

题目大意:求给定一个区间内满足每一位的数相差大于\(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数的更多相关文章

  1. 「题解」:windy数

    问题: windy数 时间限制: 1 Sec  内存限制: 512 MB 题面 题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 的正整数被称为 Windy 数. ...

  2. BZOJ1026:[SCOI2009]windy数——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2 ...

  3. 题解 P2657 【[SCOI2009]windy数】

    感觉数位DP有点弱,强化一下... 这道题是一道比较裸的数位DP. 我们用\(dp[i][j]\)表示长度为\(i\)最高位为\(j\)的windy数有多少个,状态转移方程为\(dp[i][j]=\s ...

  4. C++ 洛谷 P2657 [SCOI2009]windy数 题解

    P2657 [SCOI2009]windy数 同步数位DP 这题还是很简单的啦(差点没做出来 个位打表大佬请离开(包括记搜),我这里讲的是DP!!! 首先Cal(b+1)-Cal(a),大家都懂吧(算 ...

  5. BZOJ 1026 【SCOI2009】 windy数

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

  6. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  7. windy数(数位DP)

    windy数Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:165888KB     64bit I ...

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

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

  9. 一本通1587【例 3】Windy 数

    1587: [例 3]Windy 数 时间限制: 1000 ms         内存限制: 524288 KB 题目描述 原题来自:SCOI 2009 Windy 定义了一种 Windy 数:不含前 ...

随机推荐

  1. Vuex 注入 Vue 生命周期的过程

    首先我们结合 Vue 和 Vuex 的部分源码,来说明 Vuex 注入 Vue 生命周期的过程. 说到源码,其实没有想象的那么难.也和我们平时写业务代码差不多,都是方法的调用.但是源码的调用树会复杂很 ...

  2. ARouter使用

    1. androidstudio3.0配置 javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_ ...

  3. 【已学完】UGUI Schedule

    章节 内容 签到 Unity4.6 New UI(UGUI) 1.UGUI概述与Canvas画布介绍(一) 5月14日 2.Canvas画布介绍(二) 5月14日 3.Text控件 5月14日 4.I ...

  4. 喵的Unity游戏开发之路 - 互动环境(有影响的运动)

    如图片.视频或代码格式等显示异常,请查看原文: https://mp.weixin.qq.com/s/Sv0FOxZCAHHUQPjT8rUeNw 很多童鞋没有系统的Unity3D游戏开发基础,也不知 ...

  5. CocosCreator游戏开发(五)实现技能按钮

    在上一篇中,已经顺利的实现了通过摇杆控件来控制角色移动的例子 这一篇内容中,主要来实现通过摇杆来操作技能施法位置的功能 代码效果如下: 在最初的想法中,我是想将摇杆与技能施法范围以及施法位置做成一个组 ...

  6. 题解 洛谷P3799 【妖梦拼木棒】

    一道水题 (还是做了一个小时,我太菜了 基本思路: 题里面说,4根棍子拼成一个正三角形(等边三角形) 若设这四根棍子长度为\(a,b,c,d\)且\(a≥b>c≥d\) 那很容易得到 (真的很容 ...

  7. Oracle两个数据库互相访问-九五小庞

    Oracle两个数据库互相访问

  8. 对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你

    对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你 项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java.ReactNative.C# .NET.A ...

  9. ZT:15 个你非了解不可的 Linux 特殊字符

    https://os.51cto.com/art/202003/611595.htm 不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有 ...

  10. IDEA项目左侧目录看不到target

    点击如下图所示图标,然后选择Show Excluded Files后即可出现