bzoj 1026 [SCOI2009]windy数 题解(数位DP)

深入解析ChangeFormer:基于Transformer的孪生网络在遥感变化检测中的创新应用 本文深入解析了ChangeFormer这一基于Transformer的孪生网络在遥感变化检测中的创新应用。通过分层Transformer编码器、特征差异计算模块和轻量级MLP解码器的设计,ChangeFormer在LEVIR-CD数据集上取得了90.4%的F1分数,显著优于传统卷积网络。文章还详细探讨了工程化实现、训练调参和模型部署的优化策略,为遥感变化检测领域提供了新的技术范式。 阅读详情

原题链接:
洛谷:点我QωQ
bzoj:点我QωQ

题意简述

定义一个 W i n d y Windy Windy数为:一个 W i n d y Windy Windy数没有前导零并且所有相邻的两位差的绝对值都 > = 2 >=2 >=2。给定 l , r l,r l,r求 [ l , r ] [l,r] [l,r]之间有多少 W i n d y Windy Windy数。

数据

输入

一行两个正整数 l , r l,r l,r。

输出

l , r l,r l,r中有多少 W i n d y Windy Windy数。

样例

输入
1 10
输出
9

输入
25 50
输出
20

思路

显然数位 D P DP DP。我个人认为,数位 D P DP DP不难在 D P DP DP方程,而是难在数位拆分。

part1. D P DP DP方程推导

设 d p [ i ] [ j ] dp[i][j] dp[i][j]为:位长度为 i i i,首位是 j j j,有多少 W i n d y Windy Windy数。
那么 d p [ i ] [ j ] = d p [ i − 1 ] [ k ] ( ∣ k − j ∣ > = 2 ) dp[i][j]=dp[i-1][k]\quad(|k-j|>=2) dp[i][j]=dp[i−1][k](∣k−j∣>=2),这很显然。也就是我们枚举一个满足条件的点作为上一个状态。

part2. 数位拆分

我们设一个 c a l c ( x ) calc(x) calc(x),表示 [ 1 , x ] [1,x] [1,x]中有多少 W i n d y Windy Windy数。那么答案 = c a l c ( r ) − c a l c ( l − 1 ) =calc(r)-calc(l-1) =calc(r)−calc(l−1)。那么问题来了:如何求 c a l c ( x ) calc(x) calc(x)?
我们通过举例子的方法理解。设 x = 654 x=654 x=654。那么,答案分为几类呢?

  1. 首位是 [ 1 , 5 ] [1,5] [1,5],剩下的位随便取。此时的答案是 d p [ 3 ] [ 1...5 ] dp[3][1...5] dp[3][1...5]
  2. 位数 &lt; 3 &lt;3 <3。此时的答案为 d p [ 2 ] [ 1...9 ] + d p [ 1 ] [ 1..9 ] dp[2][1...9]+dp[1][1..9] dp[2][1...9]+dp[1][1..9]
  3. 取 654 654 654的 1...3 1...3 1...3为前缀,剩下的位 &lt; 654 &lt;654 <654(即 6 ∗ ∗ 6** 6∗∗, 65 ∗ 65* 65∗, 654 654 654,其中 ∗ * ∗表示小于后面位的任意)。

我们把它广义。设 x x x分解完有 c n t cnt cnt位,第 i i i位(全网为数不多的从左到右数的)为 d [ i ] d[i] d[i]。那么

  1. 也就是 d p [ c n t ] [ 1... ( d [ 1 ] − 1 ) ] dp[cnt][1...(d[1]-1)] dp[cnt][1...(d[1]−1)]
  2. 也就是 d p [ 2... c n t ] [ 1...9 ] dp[2...cnt][1...9] dp[2...cnt][1...9]
  3. 就比较复杂了,单独拿出来讲。

我们枚举前缀长度 i i i从 1 1 1到 c n t − 1 cnt-1 cnt−1。枚举一个 j j j使得 ∣ j − d [ i ] ∣ &gt; = 2 |j-d[i]|&gt;=2 ∣j−d[i]∣>=2并且 j &lt; d [ i + 1 ] j&lt;d[i+1] j<d[i+1]。其中 ∣ j − d [ i ] &gt; = 2 ∣ |j-d[i]&gt;=2| ∣j−d[i]>=2∣保证满足条件, j &lt; d [ i + 1 ] j&lt;d[i+1] j<d[i+1]保证我们枚举出来的数 &lt; = x &lt;=x <=x。这样枚举 j j j后,加入 d p [ c n t − i ] [ j ] dp[cnt-i][j] dp[cnt−i][j]到答案。其中 c n t − i cnt-i cnt−i表示剩下 c n t − i cnt-i cnt−i位, j j j表示我们枚举剩下的首位为 j j j。当然,我们枚举的这个前缀要满足条件。即:如果 1... i 1...i 1...i中有差绝对值 &lt; 2 &lt;2 <2的就直接 b r e a k break break。当然,不用每次都查,只要在我们枚举 i i i的时候,判断下一次会不会 b r e a k break break即珂。当然还要特判 x x x。如果我们枚举的 i = = c n t − 1 i==cnt-1 i==cnt−1,说明搞完了,而且没有被 b r e a k break break掉,那么说明 x x x本身也是 W i n d y Windy Windy数,我们没有算到,故 + + a n s ++ans ++ans。

代码:

#include<bits/stdc++.h>
using namespace std;
namespace Flandle_Scarlet
{
    #define N 20
    int dp[N][N];
    void DP()
    {
        for(int i=0;i<=9;++i) dp[1][i]=1;//明显边界
        int n=11;
        for(int i=2;i<=n;++i)
        {
            for(int j=0;j<=9;++j)
            {
                for(int k=0;k<=9;++k)
                {
                    if (abs(k-j)>=2)
                    {
                        dp[i][j]+=dp[i-1][k];//明显的转移
                    }
                }
            }
        }
    }
    int calc(int x)
    {
        int d[N];int cnt=0;
        while(x!=0)
        {
            d[++cnt]=x%10;;
            x/=10;
        }reverse(d+1,d+cnt+1);//我是正着数的,所以reverse
 
        int ans=0;
        for(int i=2;i<=cnt;++i)//情况2.
        {
            for(int j=1;j<=9;++j)
            {
                ans+=dp[cnt-i+1][j];
            }
        }
        for(int i=1;i<d[1];++i)//情况1.
        {
            ans+=dp[cnt][i];
        }
        for(int i=1;i<cnt;++i)//情况3.
        {
            for(int j=0;j<d[i+1];++j)
            {
                if (abs(d[i]-j)>=2)
                {
                    ans+=dp[cnt-i][j];
                }
            }
            if (abs(d[i]-d[i+1])<2) break;
            if (i==cnt-1) ++ans;
        }
        return ans;
    }
 
    void Main()
    {
        if (0)
        {
            freopen("","r",stdin);
            freopen("","w",stdout);
        }
        DP();
        int l,r;scanf("%d%d",&l,&r);
        printf("%d\n",calc(r)-calc(l-1));
    }
};
main()
{
    Flandle_Scarlet::Main();
    return 0;
}

回到总题解界面

MQTT(轻量级消息中间件)基本使用指南 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布 / 订阅模式(Pub/Sub)消息传输协议,专为低带宽、不稳定网络环境设计,广泛应用于物联网(IoT)、移动设备、传感器网络等场景(如空气净化器、智能家居设备的远程控制)。Eclipse Mosquitto 是一款轻量级、开源的 MQTT 消息服务器(Broker),由 Eclipse 基金会维护,专为低资源消耗和易用性设计。 阅读详情

相关推荐

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

【BZOJ1026】windy数题解

题面【题目描述】windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?【输入】包含两个整数,A B。【输出】一个整数。【输入样例一】1 10【输入样例二】25 50【输出样例一】9【输出样例二】20【数据规模和约定】100%的数据,满足 1 <= A <= B <= 200000000

堕落之神の堕落园 783

FPGA实战:给你的UART串口通信加上Verilog奇偶校验位(Modelsim仿真验证)

本文详细介绍了如何在FPGA中实现UART串口通信的Verilog奇偶校验功能,包括发送端校验位生成和接收端校验检测的设计与实现。通过Modelsim仿真验证,确保数据传输的可靠性,适用于嵌入式系统和数字通信领域。

weixin_34216614的博客 341

[SCOI2009]windy数 题解

题目链接 数位dp入门题,dfs(len,ps,lead,up)表示当前枚举到第len位,前一位数为ps,是否有前导0,是否达到上界。 数位dp这一篇讲得很好orz #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #define max(x,y) ((x)&gt;(y) ? (x) : (y)) ...

Ansicht's Blog 284

ZXDoc工业级CAN总线仿真工具全解析与应用实践

CAN总线作为现代工业通信的核心协议,其仿真技术是汽车电子和工业控制领域的关键支撑。通过物理层信号模拟、协议层报文解析和应用层人机交互的三维仿真,开发者能够构建完整的硬件在环测试环境。ZXDoc作为工业级仿真工具,集成了DBC工程化管理、HMI面板设计和自动化测试脚本等核心功能,特别适用于ECU开发、产线验证等场景。工具支持ISO11898标准协议,提供错误帧注入、负载压力测试等高级特性,结合Python API可实现复杂测试用例的自动化执行。在新能源车VCU测试等实践中,通过优化采样点等参数配置,显著提升

weixin_30096975的博客 471

道路损伤检测必备:RDD2022数据清洗与增强的5个关键步骤

本文详细介绍了道路损伤检测中RDD2022数据集清洗与增强的5个关键步骤。通过深度数据质量审计、跨国家分布分析、面向真实场景的智能增强、以模型表现为导向的数据集划分,以及构建自动化处理流水线,将原始数据转化为高质量训练集,有效提升模型性能。

cola5的博客 515

bzoj 1026 [SCOI2009]windy数 题解

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1875  Solved: 810 [Submit][Status] Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有

阿蒋的专栏 1404

内网CentOS离线部署LibreOffice:从依赖缺失到服务启动的完整避坑指南

本文详细介绍了在CentOS内网环境中离线部署LibreOffice的完整流程,包括依赖包准备、安装顺序优化及常见报错解决方案。针对金融等封闭网络场景,提供从rpm包选择到服务启动的全套避坑指南,特别解决libXinerama等图形库缺失问题,确保文档转换服务稳定运行。

weixin_33416697的博客 246

【SCOI 2009】 Windy数

【题目链接】            点击打开链接【算法】          数位DP,注意处理前导零的情况【代码】           #include&lt;bits/stdc++.h&gt; using namespace std; #define MAXL 15 int n,m; int dp[MAXL][10],a[MAXL]; template &lt;typename T&gt; ...

even_bao的博客 197

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑

本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。

gg901的博客 1086

PSM倾向性评分分析介绍、spss进行倾向性评分分析示例

PSM倾向性评分分析介绍、spss进行倾向性评分分析示例

statistics+insight+vista+power 1481

bzoj1026 [SCOI2009]windy数

题目又是数位dp 只要套模板就好了。。。值得说明的是,这是第一道需要记录前缀0的数位dp233。#include<bits/stdc++.h> using namespace std; int dp[15][10][2]; int digit[15]; int m,n; int len; int DFS(int pos,int pre,int limit,int flag) { if(po

浅笑~如夏 235

基于STM32L4XX 、HAL库的DRV8825PWPR步进电机驱动器驱动程序应用设计

一、简介:DRV8825是德州仪器(TI)推出的一款高性能步进电机驱动器模块。它集成了微步进分度器、MOSFET H桥以及过流、欠压锁定和过热保护电路。主要特性:驱动能力: 最高电压45V,每相最大电流2.5A(需配合足够散热)。微步进: 支持全步、1/2、1/4、1/8、1/16、1/32微步模式,通过M0, M1, M2三个引脚控制。控制接口: 非常简单,只需要两个核心信号:(脉冲输入):每个上升沿脉冲驱动电机移动一个微步。(方向控制):高电平/低电平决定电机旋转方向。使能端: (睡眠模式,低电平有效)

PP_Cottage的博客 330

题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP

BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #include<cstdio> #include<iostream> #include<cstring> #define R re...

153

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

BZOJ P1026 LOJ #10165 「SCOI2009」windy数【数位DP】【详细题解】

f[i][j]f[i][j]f[i][j]表示长度为iii并且最高位为jjj的windy数的个数。 递推关系:f[i][j]=∑f[i−1][k]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;abs(j−k)≥2f[i][j]=\sum f[i-1][k]\ \ \ \ \ \ \ abs(j-k)\ge

Yucohny 464

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

bzoj1026【SCOI2009】windy数

动态规划

AaronPolaris 3108

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

bzoj1026: [SCOI2009]windy数-数位DP

问题描述 windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 数位DP 分成两步:求总共的DP和统计答案 DP: dp[i][j]表示i位数字,最高位为j的windy数的个数 dp[i][j]=sum(dp[i-1][k]) |j-k|>=2 边界dp[1][j]=

zz_ylolita 3203

BZOJ_1026_[SCOI2009]windy数_数位DP

BZOJ_1026_[SCOI2009]windy数_数位DP 题意:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 学一下数位DP。 f[i][j]表示i位数以j开头的windy数个数。转移有f[i+1][k]+=f[i][j](abs(j-k)&...

141

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/902...

mrcrack的博客 259

[SCOI2009]windy数 BZOJ1026 数位dp

[SCOI2009]windy数 BZOJ1026 数位dp 题目描述 windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? 输入输出格式 输入格式: 包含两个整数,A B。 输出格式: 一个整数 输入输出样例 输入样例#...

loooooog的博客 208

[bzoj1026][SCOI2009]windy数

1026: [SCOI2009]windy数Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4002 Solved: 1788 [Submit][Status][Discuss] Descriptionwindy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,

Vampire 1994

bzoj 1026[SCOI2009]windy数 - 数位dp

1026: [SCOI2009]windy数 Time Limit:1 SecMemory Limit:162 MB Description   windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input   包含两个整...

141

【数位DP】windy数 BZOJ1026 UESTC1307

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B。 Output 一个整数。

Jiangzh_MZOI 917

BZOJ1026 SCOI2009windy数

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4193  Solved: 1877 [Submit][Status][Discuss] Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之

毒液哥的专栏 405

【luogu2657】【bzoj1026】 [SCOI2009]windy数 [动态规划 数位dp]

P2657 [SCOI2009]windy数 bzoj1026 一本通说这是一道数位dp模板题 emmmmm 就是逐位确定 f[i][j]表示填了i位数其最高位数字为j 然后就去求可能方案数 分为 不满足x的位数的严格小于x的全部情况 和x的位数相同 但最高位小于x的最高为的全部方案数 和x的位数相同 有一位比x的对应位数小的全部方案数 其余位数对应数字都相同(这是数位dp常用...

weixin_30695195的博客 151

【数位DP】bzoj1026: [SCOI2009]windy数

1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4163  Solved: 1864[Submit][Status][Discuss] Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A

puck_just_me的blog 405
上一篇: codeforces 1012B 题解(建图,思维,并查集)
下一篇: 洛谷 2155[SDOI2008]沙拉公主的困惑 题解(数论)
LightningUZ
博客等级 码龄9年 33粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值