【蓝桥杯】奇怪的数

蓝桥杯——奇怪的数列 简单思维题 阅读详情
AI摘要

本文介绍了一种使用动态规划方法解决一个问题,寻找满足特定条件的奇怪数,即数的奇数位是奇数,偶数位是偶数,且任何5个连续数位之和不超过m。通过设置dp数组并定义状态转移方程,计算符合条件的奇怪数的数量,并对998244353取模。

// 奇怪的数
// 小蓝最近在找一些奇怪的数,其奇数数位上是奇数,而偶数数位上是偶数同时,这些数的任意5个连续数位的和都不大于m。
//         例如当m=9时,10101和12303 就是奇怪的数,而12345 和11111则不是。
// 小蓝想知道一共有多少个长度为n的上述的奇怪的数。你只需要输出答案对998244353取模的结果。

// 总体解题思想是:
//      任意5个连续数位  -->  意思就是说,我们只要确定 高四位的数字 那么最低位的数字的最大值就是固定的或确定的
//                              比如 当m=9时,我们随机确定高四位数 1010 那么最低位的数字只能 <=7 即最大数字为 10107
//      因此以高四位为基础,每次迭代一个数位来DP 从个位开始 每个高四位dp 表示 当高四位为 此四位时,所能得到的符合要求数字的个数的最大值
//      根据以上设置 dp数组 为 dp[2][12][12][12][12]  dp[i][a][b][c][d]     a表示最低位
//          dp[2] 表示 当前四位数的数组 和 上一个四位数的数组 如:十百千万 数位 和 个十百千数位 前四个数位结果将影响后四个数位的结果
//      dp后四位表示为 在保持高三位不变的情况下(即dcb)  dp[a+2][b][c][d] = dp[a][b][c][d] + (a+b+c+d <= m)
//          即高三位不变的情况下 dp[a][b][c][d] 的结果只对 dp[a+2][b][c][d] 及后面的值有影响
//       dp[0] 和 dp[1] 的关系是 (引入 e 表示第五位) 数字(edcba) dp[a][b][c][d] 和 dp[b][c][d][e]
//      dp[1][b+2][c][d][e] = dp[1][b][c][d][e] + dp[0][m-b-c-d-e +2][b][c][d] (注意:m-b-c-d-e+2 的值必须与这个数位的奇偶性相同)
//          上面的就是状态转移方程 表示的是 当前dp值 = 前一个数的dp值 + 当前数符合要求(不大于m)的最大数的dp值(关系到a的值)
//
//   找结果时,我们只要固定高三位,遍历累加符合要求的第四位的dp值
#include <iostream>
#include <vector>
using namespace std;

const long MOD = 998244353, M=12;
int n,m;
int dp[2][M][M][M][M];
int p=1,q=0;    // 指示i的值 p表示奇数位的初始值,q表示偶数位的初始值

// 初始化dp
void iniDp()
{
    // 此时 i=4
    for (int a=p; a<10; a+=2)
        for (int b=q; b<10; b+=2)
            for (int c=p; c<10; c+=2)
                for (int d=q; d<10; d+=2){
                    dp[0][a+2][b][c][d] = dp[0][a][b][c][d] + (a+b+c+d <= m);
                }
}

// 计算dp
void slove()
{
    // 从第五位数开始
    for (int i=5; i<=n; ++i){
        p^=1;   // 移动一位数 奇偶性发生变化 将值取反
        q^=1;
        for (int a=p; a<10; a+=2)
            for (int b=q; b<10; b+=2)
                for (int c=p; c<10; c+=2)
                    for (int d=q; d<10; d+=2){
                        // 计算第5个值的范围
                        int f = m - a - b - c - d;
                        // q与前一位数的奇偶性是一样的
                        if ((f&1) != q)   --f;    // 这里要控制 f与前一个数 是相同 奇偶性
                        // 当f的值 大于最大值
                        if (f > q+8) f = q+8;
                        dp[ i&1 ][a+2][b][c][d] = (dp[ i&1 ][a][b][c][d] + (f < q ? 0 : dp[~i & 1][f+2][a][b][c])) % MOD;
                    }
    }
}

// 求结果
long retAns()
{
    long ans=0;
    int i = n&1;
    
    for (int b=q; b<10; b+=2)
        for (int c=p; c<10; c+=2)
            for (int d=q; d<10; d+=2){
                // 计算第4和5个值的范围
                int f = m - b - c - d;
                if (f < p) continue;
                // p与当前位数的奇偶性是一样的
                if ((f&1) != p)   --f;    // 这里要控制 f与前一个数 是相同 奇偶性
                // 当f的值 大于最大值
                if (f > p+8) f = p+8;
                ans = (ans + dp[i][f+2][b][c][d]) % MOD;
            }
    
    return ans;
}

int main()
{
    cin >> n >> m;

    iniDp();
    slove();
    long ans = retAns();

    cout << ans << endl;

    return 0;
}

【C++】20191002 奇怪数二进制简便算法 数据结构:找出1~1000内所有奇怪数 阅读详情

相关推荐

蓝桥杯P1259-奇怪的馈赠 (贪心题解)

需要将 100 万(1,000,000)正好分成若干个 7 的次方形式的数(如 7^0=1, 7^1=7, 7^2=49 等),且每种金额(即每个 7 的次方)的使用次数不能超过 5 份。也算 7 的若干次方,主包这里没注意成蠢货了。

2302_80853925的博客 2961

蓝桥杯c++简单题

先不要想着怎么用程序去解决,因为这个是填空题先看自己可以怎么手算这道题100万=100,0000最接近100万的7的次方值是?(使用电脑自带的计算器-慢,直接让程序print-快)0:11:72:493:3434:24015:168076:1176497:8235438:5764801所以最多只能是到7的7次方,那么先从小到大,先多算数值比较小的(目标1)一直看什么时候满足和刚刚好(目标2)目标1:份数越多越好目标2:要正好被分成若干份。

weixin_59059358的博客 372

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

【蓝桥杯每日一练】特殊的数字

一、题目描述 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=13+ 53 + 33。编程求所有满足这种条件的三位十进制数。 输出 按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。 二、个人解析 这道题十分地简单,首先看题目是三位数,那么使用for语句从100开始直到1000进行自增循环;再将个位、十位、百位使用求余数的方式进行拆开,然后使用函数pow()求每一位的立方之和;之后使用if语句进行判断所求得每个位数上的立方和是否与原来的数相等;如果相等,则输出该数。

泥菩萨会发光的小窝 1158

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9007

正点原子RK3588 Android 12镜像构建实战:从环境配置到烧录验证全指南

本文提供了一份基于正点原子RK3588开发板的Android 12镜像构建全流程实战指南。内容涵盖从Ubuntu环境配置、SDK获取、编译内核与系统,到最终镜像打包与烧录验证的完整步骤,并分享了内核驱动定制与系统优化技巧,旨在帮助开发者高效完成瑞芯微RK3588平台的系统定制工作。

grass的博客 812

蓝桥杯第六届C/C++ 大学A组省赛题 奇妙的数字

蓝桥杯第六届C/C++省赛真题:奇妙的数字

weixin_52005740的博客 875

二、时间序列的预处理

一般情况下,拿到一个观察值序列之后,首先要对它的平稳性和纯随机性进行检验,这两个重要的检验称为序列的预处理。根据检验的结果可以将序列分为不同的类型,对不同类型的序列我们会采用不同的分析方法。 一、平稳性检验 1、特征统计量 (1)概率分布           数理统计的基础知识告诉我们分布函数或者密度函数能够完整地描述一个随机变量的统计特征。同样,一个堆积变量族{Xt} 的统计特征也完全由...

Nicole的博客 2万+

蓝桥杯:奇怪的数列

关键是嵌套循环的表示,注意to_string(count)的使用。

2302_79279009的博客 534

【FPGA】DDR3调试总结

DDR3管脚根据不同的功能可以分为:数据组、地址组、控制组和电源组。如图上所示,共96个管脚。

m0_51679724的博客 4967

C#量化交易的市场数据采集与分析:从0到1构建你的‘数据雷达’——对比5大神器,代码实战全解析!

数据是量化交易的‘氧气’,而好的数据采集与分析是你的‘呼吸机’!本文5大神器+代码实战,总有一款适合你!(本文代码均经过测试,但请根据实际需求调整!

java专栏 733

蓝桥杯-2023年十四届-省赛-研究生组-c++-6-奇怪的数

/主要思路 动态规划 因为是连续的五位数之和不大于m 因此我们能想到使用四位推出第五位, //再使用后四位得到新的四位推出第六位。2.题目是dp[i][j][k][t]->-> p j k t q -> dp[j][k][t][q]表示为数组如下图所示:(标黄为遍历过,不一定每个都是1,但是1的意思是符合约束条件的为1)1.题目是符合要求的五位数,用了四位数组,我自己理解用符合要求的3位数,用二维数组,1.看不明白不会做,看题解,知道涉及到动态规划,明白原理之后解题还是很抽象看不明白。

weixin_43746058的博客 556

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

蓝桥杯真题 - 奇怪的数 - 题解

个人评价:难度 4 星(满星:5)前置知识:动态规划。

Dmaxiya 1049

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

第十四届蓝桥杯c++研究生组省赛

因为状态设计是保存最后四位数字,每次添加新的数字e到末尾,状态变化为 a b c d->b c d e。所以初始化对于长度为1的数字,只用关注d位就好,前面的三位用0占位。假设长度为。

qq_53547323的博客 1545

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

第十四届蓝桥杯大赛软件赛省赛(C/C++ 研究生组)

第十四届蓝桥杯大赛软件赛省赛 C/C++ 研究生组

NOW I GOT ONE WAY 5347

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝桥杯3527 阶乘的和 | 组合数学

这个题目的思路是对Ai排序后,记录每个Ai出现的次数dic[Ai]。显然最小的A0满足m。每次遍历dic,如果m对应的Ai出现的次数是Ai+1的倍数,那么将其并入dic[Ai+1],同时m++。当m无法满足次数的倍数关系时m值即为所求。

brilliantgby_id的博客 498

蓝桥杯-结果填空题

蓝桥杯 结果填空题 微生物增殖 除去次方数 古堡算式 奇怪的比赛 欧拉与鸡蛋

继续激情,继续奋斗。 2974

蓝桥杯1259——奇怪的捐赠(python)

使用暴力求解法、七进制数准换法、伪贪心算法解决财产划分问题

Gyy1314521的博客 950

c++矩阵出现奇怪的数_第十一届蓝桥杯省模拟赛 试题+题解 C/C++描述

本文是第十一届蓝桥杯省模拟赛的试题和部分题解,博主参加的是4.13日的下午场,也就是本次模拟赛的第一天了吧,不知道有没有上午场。后续场次的题目应该都是一样的,大家可以进行参考。这次模拟还是只做了1小时,后两题不会写。第九题想用dp,结果内存超了,第十题应该是prim算法。前八题还好,正常的省赛难度吧,差不多。大家加油~每题都给了题目+题目解析+答案,大家可以参考。第一题题目问题描述一个包...

weixin_32349223的博客 350

奇怪的道路(递归回溯)

问题 A: 奇怪的道路 时间限制: 1 Sec 内存限制: 128 MB [提交] [状态] 题目描述 从前,有一座网格城市,城市中每个房子占据一个正方形小格子的中心,每个正方形小格子的边长均为1。 这座城市道路的设计方式是这样的,首先,定义(a)图为一个基本图形,其阶为1,之后,将(a)图中每一个房子都用一个基本图形代替,得到(b)图,那么(b)图的阶即为2,再将(b)图中的每一个房子都用基本图形替代,得到阶为3的©图,以此类推,只要知道这座城市的阶n,就可以知道它的道路设计。 这种七拐八弯的道路设计

林苏泽 264

蓝桥杯每日一题:1259(奇怪的捐赠)

本文讲解蓝桥杯题目"奇怪的捐赠"的解题思路。题目要求将100万元分成若干份,每份为7的幂次方且不超过5份。核心解法是将100万转换为七进制数(11333311),然后将各数位相加(1+1+3+3+3+3+1+1=16)即为最多可分份数。文章详细介绍了十进制转七进制的方法:反复除以7取余数,最后倒序排列。代码实现简单,只需循环取余求和即可。作者强调进制转换是重要解题工具,后续会结合贪心算法等更复杂题型讲解。

2401_86878806的博客 1317

第十四届蓝桥杯大赛软件赛省赛Java 研究生组G题

通过动态规划巧妙地解决了复杂的约束问题,充分利用了奇偶性和滑动窗口的性质。代码逻辑清晰、实现正确,能够高效处理大规模数据。

Java爱好者,热爱分享,信仰开源! 2099

2014年第五届C/C++ B组蓝桥杯省赛真题

这里是蓝桥杯历年的题目专栏,将会陆续更新将往年真题以及解答发布出来,欢迎各位小伙伴关注我吖,你们的点赞关注就是给我最好的动力!!! 每天更新一届真题,敬请期待 蓝桥杯历年真题及详细解答 目录第一题:啤酒和饮料第二题:切面条第三题:李白打酒第四题:史丰收速算第五题:打印图形第六题:奇怪的分式第七题:六角填数第八题:蚂蚁感冒第九题:地宫取宝第十题:小朋友排队 第一题:啤酒和饮料 题目描述 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你.

戎码一生的博客 8065

蓝桥杯小白刷题(也就写写水题骗骗自己了)

本文整理了DFS、BFS算法及相关优化技巧的典型题目解法。包含全排列、组合素数判断(DFS基础)、迷宫填色和最短路径(BFS基础),以及剪枝优化(数的划分、电梯问题)、双向搜索(字串变换)、记忆化搜索(滑雪问题)等进阶应用。最后收录了蓝桥杯全球变暖真题,通过BFS统计岛屿数量。所有代码均采用C++实现,包含关键注释和优化思路,涵盖算法竞赛中的常见搜索题型及解题技巧。

2401_88089822的博客 245
上一篇: 经典算法总览 【算法设计指南】【C语言实现】【持续更新】
下一篇: C的第一个程序【C语言教程】【预篇 1】
N-PlusPlus
博客等级 码龄5年 85粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值