
算法题
是苍啊!
努力逃离知识恐慌,愿天下程序员都能平安落地
展开
-
最大子序列和
本文使用暴力枚举法,事件复杂度O(N^2)。原创 2022-05-02 16:59:43 · 476 阅读 · 0 评论 -
开心的金明 (0-1背包)
该题是0-1背包的简单变体原创 2022-05-02 14:42:33 · 271 阅读 · 0 评论 -
0-1背包的空间优化
0-1背包的代码有很多种,空间复杂度各不相同,原创 2022-05-02 09:53:38 · 347 阅读 · 0 评论 -
最长上升子序列的代码
最长上升子序列原创 2022-05-01 22:35:03 · 268 阅读 · 0 评论 -
数字金字塔
介绍了黄金金字塔问题原创 2022-05-01 21:44:51 · 674 阅读 · 0 评论 -
关于递归函数的几点经验
关于递归写法的几点经验转载 2022-05-01 21:19:06 · 173 阅读 · 0 评论 -
生成杨辉三角
生成杨辉三角的代码原创 2022-05-01 20:58:28 · 337 阅读 · 0 评论 -
杨辉三角求组合数(二维递推)
使用二维递推杨辉三角求组合数原创 2022-05-01 20:37:44 · 440 阅读 · 0 评论 -
错位排列问题(递推法)
递推法求解 错位排列原创 2022-05-01 19:42:44 · 794 阅读 · 0 评论 -
有效括号对数(递推法)
介绍了一种十分简单的查找有效括号序列的方法。原创 2022-05-01 16:38:39 · 391 阅读 · 0 评论 -
三连击(枚举排列)
问题将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是a : b : c,试求出所有满足条件的三个三位数,若无解,输出 No!!!。输入描述:三个数,a, b, c。输出描述:若干行,每行 3 个数字。按照每行第一个数字升序排列。示例 1:输入:1 2 3输出:192 384 576219 438 657273 546 819327 654 981思路本解法采用枚9个数排列的举每一种情况, 使用 c++中的 next_permutation原创 2022-04-17 16:53:52 · 657 阅读 · 0 评论 -
取宝石问题
题目取宝石问题假设在一个大房间有n个宝石,每一处宝石用一个坐标(x, y)表示。如果你从任意一处宝石的地方出发,依次经过每个放宝石的地方并取走宝石,最终要求回到出发地点,问最短需要走的距离是多少。本题允许走直线。思路采用枚举法,在这个情境里,经过不同地点的顺序会改变最终的行走距离。所以,我们要枚举的就是经过1~n一共n个位置的顺序。枚举n个位置的顺序其实是一个排列问题, 那么可以直接用 C++ 中的 next_permutation 函数来快速获得下一个排列,获得下一个排列的时间复杂度为 O(n原创 2022-04-17 11:40:33 · 950 阅读 · 0 评论 -
珠心算测验
题目[NOIP2014普及组] 珠心算测验珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测验题,请你帮忙求出答案。输入描述:共两行,第一行包含一个整数𝑛,表示测试题中给出的正整数个数。第二行有𝑛个正整数原创 2022-04-17 10:23:19 · 531 阅读 · 0 评论 -
比特枚举子集
题目描述枚举n个数字组成集合的所有子集,输出子集和。下面给出的暴力解法虽然时间复杂度极高,但是写法极其优雅。暴力枚举假设有n个数,遍历0 ~ 2^n - 1 ,遍历到第i个数时,用第i个数的n个二进制位表示取不取数组中的第i个元素。// 输入int a[] = {2, 1, 3, 6, 5};int n = 5;// 计算int tot = 1 << 5; // 相当于求2的5次方for (int i = 0; i < tot; ++i) { // 变量i的转载 2022-04-16 21:04:37 · 142 阅读 · 0 评论 -
大整数乘法
思路解决大整数乘法,需要理解一个核心概念: 被乘数的第i位 乘以 乘数的第j位, 将贡献到答案的第i+j 位 。如下图 :2 . 容易得到,若乘数有m位,被乘数有n位,那么两数的乘积最多有 m + n 位。因此,可以把乘积的位数预设为两乘数的位数和。细节1.因为同一个答案位k可能对应着多种情况的 i + j, 即,一个答案位可能加上多个乘积,所以答案位的赋值应该用 += 而不能用 =。2.同样的道理,因为同一个答案位可能加上多个乘积,那么可以把进位操作放在累加循环之后做,这样可以减少操作次数原创 2022-04-16 19:39:28 · 421 阅读 · 0 评论 -
简化版大整数减法
前言在大整数减法中,被减数和减数的符号可以为正负两种情况,被减数和减数谁大谁小也未可知,所以若要完整的考虑大整数减法,情况是很复杂的。本文考虑仅仅考虑大整数减法的一种特殊情况,规定减数和被减数都为正数,且被减数大于减数。思路1 . 实现大整数减法,同样也要实现大整数的输入和输出,这里对输入进行了简化,存储仍然采用小端存储。2 . 因为只考虑 被减数大于减数的情况,因此可以直接进行相减。若相减的结果小于0,从前位借1,本位加10。3 . 减完以后,需要确定结果的长度。 可以先预设长度等于被减数,原创 2022-04-16 16:56:25 · 411 阅读 · 0 评论 -
大整数加法
概述在C/C++中,long long 的长度一般为 64bit 整形, 大概能处理绝对值小于 8 * 10^18 的加法。若加法的结果或操作数的绝对值大于这个范围,那么系统就不能处理了。此时需要用到大整数的技巧,用两个数组来存储操作数,一个数组来存储结果,模拟竖式加法来完成大整数的加法。需要实现的操作要实现一个大整数加法,需要实现的操作不仅仅是加法操作,还要实现大整数的存储和输入输出,这样才算完整。不要觉得输入输出简单,这里面也蕴含着一些技巧需要掌握。存储方式大小端序 :大端序:数字的高原创 2022-04-16 12:24:39 · 1394 阅读 · 0 评论 -
生成扫雷矩阵
题目扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。输入描述:输入有多组数据,每组数据的第一行有两个数字,m, n (0 < m, n< 100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。*表示有地雷,.表示无地雷。最后一组数据m = 0, n = 0表示输入结束,不需要处理。输出原创 2022-04-15 21:50:36 · 1923 阅读 · 0 评论