【蓝桥杯】奇怪的数

蓝桥杯——奇怪的数列 简单思维题 阅读详情
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

手把手教你用SIMCOM A7670C_FASL模组实现双路MQTT连接阿里云(附完整源码)

本文详细介绍了如何使用SIMCOM A7670C_FASL 4G模组实现双路MQTT连接阿里云,包括硬件配置、开发环境搭建、双路MQTT架构设计及实现细节。通过完整的源码示例和实战指南,帮助开发者快速掌握物联网设备开发中的多路MQTT连接技术,提升工业级应用的开发效率。

weixin_33696822的博客 227

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

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

泥菩萨会发光的小窝 1158

【GEE实战】Sen+MK趋势分析:从代码到地图,解锁植被变化时空密码

本文详细介绍了在Google Earth Engine(GEE)平台上使用Sen斜率估计和Mann-Kendall(MK)检验进行植被变化趋势分析的全流程。从遥感数据加载、Sen斜率计算到MK显著性检验,结合代码示例和实战经验,帮助读者掌握植被时空变化分析的实用技巧,为生态监测和环境保护提供数据支持。

weixin_42628688的博客 213

Android安全支付(1)-整体架构-keymint

(1)接口定义hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/IKeyMintDevice.aidl。keymint是keymaster v4之后的替代设计。所以android 15上最好采用keymint的接口进行硬件功能的对接。同时,我们会集成一款紫光的芯片。3.可以用keyStore.getKey()来获取存储在keyStore中的数据进行加密和解密。四、关于keymint的接口定义和具体实现。

Android系统开发-VR OS-系统安全隐私 1770

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

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

weixin_52005740的博客 875

MagicDraw-用例图

MagicDraw-用例图

木头征的博客 3131

蓝桥杯:奇怪的数列

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

2302_79279009的博客 534

Vue中实现word文档渲染、在线编辑、保存

Vue3对word文档进行渲染、编辑、保存。word转成html,html转成word

h18749849699的博客 1329

[24] cuda 应用之 nppi 实现图像颜色通道变换

[24] cuda 应用之 nppi 实现图像颜色通道变换

yohnyang的博客 343

蓝桥杯-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编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 188

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

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

Dmaxiya 1049

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

qq_53547323的博客 1545

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

NOW I GOT ONE WAY 5346

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝桥杯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、付费专栏及课程。

余额充值