windy数 bzoj-1026

    题目大意:求一段区间中的windy数个数。

    注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0。$区间边界<=2\cdot 10^9$。

      想法:数位dp裸题,何为数位dp?

      数位dp的意思就是我们交换一种dp的方式。通过数位进行dp。数位dp的主旨分为两点:1.对于所求答案的预处理。2.对于所求区间的边界特判。我们对于数位dp有几个显而易见但是却比较useful的性质:

        如果一个数的位数小于第二个数的位数,那么后者是大于前者的。

        如果两个数的位数相等且前者的最高位是小于后者的最高位的,那么后者是大于前者的。

        如果将两个数同时加减同一个数,他们之间的大小关系显然是不变的。

      通过以上几个性质,我们在枚举边界时可以先将位数小的全部枚举,然后对于高位到低位依次dp。

      回到这道题,我们先设状态dp[i][j]表示i位数且最高位为j。在转移时,我们其实很容易想到

        $\sum\limits_{k=0}^{9}dp(i-1,k)\cdot [|j-k|\ge 2]$

      之后,关于边界的处理,看代码... ...

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;
int f[20][20];
void before_hand()//这个是预处理,在上面说的很清楚了
{
memset(f,0,sizeof f);
for(int i=0;i<=9;i++) f[1][i]=1;
for(int i=2;i<=10;i++) for(int j=0;j<=9;j++) for(int k=0;k<=9;k++)
{
if(abs(j-k)>=2) f[i][j]+=f[i-1][k];
}
}
int dig[20];
ll dispose(ll x)//对边界的处理
{
int ans=0;
int k=0;
memset(dig,0,sizeof dig);
if(!x) return 0;
while(x)
{
dig[++k]=x%10;
x/=10;
}
for(int i=1;i<=k-1;i++) for(int j=1;j<=9;j++)//我们用给出的第一条性质,发现
ans+=f[i][j];//ans这时一定是被所求答案覆盖的
for(int i=1;i<dig[k];i++)//第二个性质
ans+=f[k][i];
for(int i=k-1;i>=1;i--)//反复运用第二、三个性质
{
for(int j=0;j<dig[i];j++)
{
if(abs(j-dig[i+1])>=2) ans+=f[i][j];
}
if(abs(dig[i+1]-dig[i])<2) break;
if(i==1) ans++;
}
return ans;
}
int main()
{
ll l,r;
scanf("%lld%lld",&l,&r);
before_hand();
printf("%lld\n",dispose(r)-dispose(l-1));
return 0;
}

    小结:前面预处理的边界不要忘记特判。数位dp的第一道题,加油,JZYshuraK

[bzoj1026][SCOI2009]windy数_数位dp的更多相关文章

  1. BZOJ_1026_[SCOI2009]windy数_数位DP

    BZOJ_1026_[SCOI2009]windy数_数位DP 题意:windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之 ...

  2. BZOJ1026 SCOI2009 windy数 【数位DP】

    BZOJ1026 SCOI2009 windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B ...

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

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

  4. 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...

  5. bzoj 1026 [SCOI2009]windy数(数位DP)

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

  6. 1026: [SCOI2009]windy数(数位dp)

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

  7. BZOJ_1026_[SCOI2009]_windy数_(数位dp)

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

  8. 【BZOJ】1026: [SCOI2009]windy数(数位dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 我果然很弱啊... 考虑数位dp.枚举每一位,然后限制下一位即可. 一定要注意啊!在dfs的时 ...

  9. 1026. [SCOI2009]windy数【数位DP】

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

随机推荐

  1. 个性化WinPE封装方法 ----最后实战“制作WinPE3.0图文教程”

    经过前几讲,主要目的就是准备一些"原材料",熟悉一些"命令",实际上是"战前演练准备".下面要进入"实战状态",成败在此 ...

  2. Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.

    1.错误描述 org.hibernate.exception.GenericJDBCException: error executing work at org.hibernate.exception ...

  3. 嵌入式 RTP通话:视频流(H.264)的传输

    从摄像头获取的视频数据,经过编码后(当然,也可以不编码,如果你觉得也很ok的话),既可以 是  开始的数据是  00 00 40 00 40 11 C1 8C 94字节) 四.RTP视频传输代码 #d ...

  4. .Net4.0 任务(Task)

    任务(Task)是一个管理并行工作单元的轻量级对象.它通过使用CLR的线程池来避免启动专用线程,可以更有效率的利用线程池.System.Threading.Tasks 命名空间下任务相关类一览: 类 ...

  5. Java注释分类

    Java注释分类 1.单行注释    //打印结果    System.out.println("结果是:"+result); 2.多行注释    /**     * @autho ...

  6. OpenStack_I版 6.Neutron部署

    Neutron是不能自己创建网络的,它需要借助插件才能创建虚拟网桥.网卡 依赖插件 配置ml2为核心插件 本次网络模型采用扁平化网络,不同的网络类型不同的配置,不同的使用方法 打开安全组功能 Linu ...

  7. meta的各种参数

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  8. 玲珑杯#2.5 A-B

    这个题解错了网上还没有题解 囧 = (i%2)? 1 : -1 = - * * *= m #include<bits/stdc++.h> using namespace std; type ...

  9. Think with Google 京东如何玩转TensorFlow?

    2018 年 2 月 6 日,Think with Google 年度峰会在北京召开.在本次峰会上,我们分享了 Google 和我们的合作伙伴在 AI (人工智能) 方面取得的成绩,探讨如何利用人工智 ...

  10. Emacs配置(考场必备)(Emacs)

    最近有几次离开自己一直坐着的座位,去别的机房考试了. 于是猛然想起来要记一记Emacs的简洁配置了. 算是把NOIP残存的记忆再拾一点起来...... 附上一些解释 (global-set-key [ ...