![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
X丶
这个作者很懒,什么都没留下…
展开
-
最小邮票数(01背包)
题目描述 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。输入描述: 有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。输出描述: 对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。示例1输入复制...原创 2021-03-19 10:26:16 · 187 阅读 · 0 评论 -
离散化--个人总结
使用离散化的一般情况:1⃣️ 数据的值的范围太大,但数据的量并不多2⃣️ 值的大小不重要,重要的是值之间的大小关系离散化一般方法:1⃣️ 排序2⃣️ 去重3⃣️ 形成新的映射例子:https://www.cnblogs.com/farewell-farewell/p/5330429.html常用到的STL库函数:unique(start,end...原创 2019-11-16 20:48:15 · 158 阅读 · 0 评论 -
在线查询第K个元素
分块思想(参考算法笔记):假设数组大小为N,那么我们把数组分成 block_num = sqrt(N)个块【向上取整】,每个块的范围是block_size= sqrt(N)【向下取整】,用block[i]记录第 i 块的元素个数,然后再开一个数组 table[i] 记录数值为 i 的元素个数添加元素 x 的时候,计算元素对应的块号为idx =x / block_size ,然后令 block[idx]+=1 , table[x] +=1删除元素 x 的时候,计算元素对应的块号为...原创 2021-03-07 10:50:23 · 119 阅读 · 0 评论 -
Find More Coins(记录背包的选择)
1068 Find More Coins (30 point(s))Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special原创 2021-03-05 13:45:08 · 172 阅读 · 0 评论 -
最大子矩阵(降维处理)
题目描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,如下4 * 4的矩阵0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2的最大子矩阵是9 2-4 1-1 8这个子矩阵的大小是15。输入输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵..原创 2021-03-04 15:32:22 · 207 阅读 · 1 评论 -
毕业BG(01背包问题)
题目描述每 年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”。参加不同团体的bg会有不同的感觉,我们可以用一个非负整数为每个 bg定义一个“快乐度”。现给定一个bg列表,上面列出每个bg的快乐度、持续长度、bg发起人的离校时间,请你安排一系列bg的时间使得自己可以获得最 大的快乐度。例如有4场bg:第1场快乐度为5,持续1小时,发起人必须在1小时后离开;第2场快乐度为10,持续2小时,发起人必须在3小时后离开;第3场快乐度为6,持续1小时,发起人必须在2小时后离开;原创 2021-03-04 14:38:34 · 197 阅读 · 1 评论 -
放苹果(求组合数)
问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?注意:假如有3个盘子,那么 5,1,1 和 1,5,1 与 1,1,5 都是同一种分法。这种求放物品的组合数问题,可以通过这样的完备思路来构造递归公式:假设有n个盘子 ,那么1、至少有一个盘子不放苹果2、n个盘子都放苹果,这两种放法是完备的。所以求出两种放法的方案数,加起来就能得出结果接下来详细利用这个思路:假设 DP(M,N)记录M个苹果放在N个的盘子的总方案数苹果数M<盘子数N,那..原创 2021-03-04 14:28:00 · 525 阅读 · 0 评论 -
合唱队形(递增再递减的最长子序列)
题目描述N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。问原创 2021-03-04 13:56:09 · 794 阅读 · 1 评论 -
问题 A: 第二题(划分一个集合为差值最小的两个子集合)
题目描述一个数组中有若干正整数,将此数组划分为两个子数组,使得两个子数组各元素之和a,b的差最小,对于非法输入应该输出ERROR。输入数组中的元素输出降序输出两个子数组的元素和样例输入10 20 30 10 1010 20 abc 10 10样例输出40 40ERROR思路:令sum为集合中所有的元素之和,当子集合的和接近 sum/2 时,两个子集合的和相差最小用DP的背包思想来考虑这个问题:把 sum/2 看作是背包的容量V,把元素的数值看...原创 2021-03-04 13:40:49 · 1044 阅读 · 2 评论 -
背包思想计算方案的总数(货币系统)
问题:已知V种不同面值的硬币,假设每种硬币的数量无限,求支付N元有多少种不同的方案?例:现在有3种货币:1元、2元、5元,需要向别人支付10元。完全背包思路:从左到右依次考虑每种货币,有两种操作:1.选 2.不选,同一种货币可以选择多次。令货币的价值=占用背包的空间,支付总价钱作为背包的容量,那么背包的容量等价于物品的价值,也就是我得到价值为K的物品,背包容量就减少了K。如果取得最大价值时,背包恰好装满,就代表放进背包的货币刚刚好能凑出支付的总价钱(容量为V的背包能取得的最大...原创 2021-03-04 11:40:30 · 173 阅读 · 1 评论 -
多阶段DP问题
多阶段DP问题的定义:一个问题可以分成多个阶段,每个阶段有多个状态,且每个阶段的状态只与上一阶段的状态有关。这类问题,题目一般会给出多个对象各自的属性和一个限制的条件,然后计算如何操作这些对象获得最优值我们可以用 dp[阶段][限制条件(状态)] 来记录某个阶段中某个状态的最优解然后找到dp[i][cur]与上一阶段的状态有什么联系,从有联系的状态中找出最优解例如01背包问题对象:物品;属性:重量、价值限制条件:背包容量vdp[i][v] 记录前i个物品(阶段i),剩下容原创 2021-03-01 15:01:00 · 218 阅读 · 0 评论 -
最长不下降子序列(推广问题)
最长不下降子序列问题的定义:在一个序列中,找到一个最长的子序列,其中这个序列是非递减的我们可以把这个非递减推广,其实非递减就是一种顺序,那么我们可以把定义推广到:给出一个顺序序列、目标序列中,在目标序列中找到一个最长的子序列,其中这个子序列是符合给出顺序的子序列解决这个推广的问题,我们可以把这个顺序序列的每一个元素映射到一个递增序列假设顺序序列为X、Y、Z,那么我们可以把它映射到 0、1、2(用Hash表实现)然后目标序列为 XYXXZXYZ,我们从上面的Hash表中找到它对应的序列为.原创 2021-03-01 11:24:11 · 131 阅读 · 0 评论 -
Jugs (BFS解决方法)
JugsTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1449Accepted Submission(s): 480Problem DescriptionIn the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with the ...原创 2021-02-19 10:25:16 · 316 阅读 · 0 评论 -
codeup:问题 D: 最短路径
题目描述有n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离和经过的城市名。输入输入包含多组测试数据。每组第一行输入四个数,分别为n,m,s,t。接下来m行,每行三个数,分别为两个城市名和距离。输出每组输出占两行。第一行输出起点到终点的最短距离。第二行输出最短路径上经过的城市名,如果有多条最短路径,输出字典序最小的那条。若不存在从起点到终点的路径,则输出“can't arrive”。样例输入3 3原创 2021-02-19 10:18:59 · 333 阅读 · 0 评论 -
迷宫问题输出超限反思
做了一题简单的迷宫题,但是OJ一直显示“输出超限”,一直找不到哪里出错后来发现,原来,我的习惯是:先判断合法性、设置标志,再进入下一层DFS,但是!!!在main函数进入DFS的第一层的时候,我忘记设置“标志”,这就违反了我上面“先标志,后进入”的原则,导致迷宫路径计算出错#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<string>#incl.原创 2021-02-01 18:56:49 · 169 阅读 · 1 评论 -
PAT 1074 Reversing Linked List
1074Reversing Linked List(25point(s))Given a constantKand a singly linked listL, you are supposed to reverse the links of everyKelements onL. For example, givenLbeing 1→2→3→4→5→6, ifK=3, then you must output 3→2→1→6→5→4; ifK=4, you must outpu...原创 2021-01-28 21:23:46 · 81 阅读 · 0 评论 -
PAT 1056 Mice and Rice (25point(s))(队列的使用)
1056Mice and Rice(25point(s))Mice and Riceis the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse in a given map. The goal of each mouse is to eat as much rice as possible in order t...原创 2021-01-28 17:47:41 · 93 阅读 · 0 评论 -
C++字符串数组排序技巧
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<vector>#include<map>#include<unordered_map>#include<string>#include<unordered_set>#include<iterator>#include<sstream&g.原创 2021-01-25 11:11:07 · 5681 阅读 · 1 评论 -
把浮点型数值用科学计数法输出
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<string>using namespace std;struct SCINUM { // 科学计数法结构体 string valid_num; //有效位 int pow;//指数 SCINUM() { pow = 0; }};SCINUM str2Sci(string num,int .原创 2021-01-21 13:37:52 · 1737 阅读 · 0 评论 -
求n!中含有质因子p的个数
定理:中含有质因子p的个数为,其中int cal(int n, int p) { int ans = 0; while (n != 0) { ans += n / p; n /= p; //相当与分母多乘一个p } return ans;}原创 2021-01-19 13:58:13 · 890 阅读 · 0 评论 -
大整数运算(必记)
大整数运算结构体struct bign { int d[maxn];//d的低位就是数值N的低位 int len;//大整数长度 //int symbol; bign() { memset(d, 0, sizeof(d)); len = 0; //symbol = 1; }};字符串转化为大整数型bign str2bign(char str[]) { bign num; int len = strlen(str); if (str[0] == '-')num.s原创 2021-01-19 13:24:47 · 209 阅读 · 0 评论 -
因子(约数)的个数
假设N = p * q ,那么p与q都是N的约数显然有,在1,2,... k ()中,如果N%k==0 ,那么就能找到N的一个或者两个约数当时,找到N的两个约数,k与n/k当时,找到N的一个约数,k#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>#include<string.h>#include<...原创 2021-01-18 22:09:24 · 105 阅读 · 0 评论 -
质因子分解
以下思路参考《算法笔记》质因子分解:把一个正整数n写成一个或多个质数相乘的形式例如 6=2✖️3 ,180=2✖️2✖️3✖️3✖️5先说如何判断一个数n,是否在[2,n) 中存在它的因子:假设这个n存在因子为k[2,n),那么nmod k=0假设这个n存在因子为 k [2,n) ,那么n\mod k=0假设这个n存在因子为k[2,n),那么nmodk=0由于n×nk=n,所以nmod nk=0,所以k与nk都是n的因子,且min(k,nk)<n由于 n\times\frac{n}{k}原创 2021-01-16 16:51:39 · 328 阅读 · 0 评论 -
PAT计算出2~N所有素数
#define maxn 405000int prime[maxn]; //保存素数的数组bool flag[maxn]; //记录是否为素数int cnt;void getPrime(int n) { memset(flag, 0, sizeof(bool)*maxn); cnt = 0; for (int num = 2; num <= n; num++){ if (flag[num] == false) { //如果num是素数 prime[++cnt] = num;/.原创 2021-01-15 19:53:06 · 99 阅读 · 0 评论 -
C语言的分数运算(简单版)
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>using namespace std;typedef long long ll;class Fraction {public: ll up, down;// up、down分别是分子、分母 Fraction(ll x = 0, ll y = 1) { up = x; down = y; this->reduction.原创 2021-01-15 15:04:57 · 4748 阅读 · 0 评论 -
动态规划(DP)通俗讲解
参考 徐凯强 Andy动态规划中递推式的求解方法不是动态规划的本质。我曾经作为省队成员参加过NOI,保送之后也给学校参加NOIP的同学多次讲过动态规划,我试着讲一下我理解的动态规划,争取深入浅出。希望你看了我的答案,能够喜欢上动态规划。0. 动态规划的本质,是对问题状态的定义和状态转移方程的定义。引自维基百科dynamic programming is a method for solving a...原创 2018-06-29 22:05:44 · 17867 阅读 · 8 评论 -
递推求LIS
#include<iostream>using namespace std;int main() { int S[100], LIS[100] = { 0 }; LIS[0] = -1; int n, i, k, y = 0; cin >> n; for (i = 0; i < n; i++)cin >> S[i]; for (i = 0; i < n; i++) { if (S[i] == LIS[y])continue; i原创 2018-06-29 21:19:41 · 143 阅读 · 0 评论 -
求分子量算法
本人是小白~ 喷轻点~分析:1.扫描字符串,用 s 记录当前字符2.如果遇到大写字母,则用 c 记录这个字母,方便下次遇到新的大写字母需要用到 c3.如果遇到数字串,用cnt记录这个数字串4.到下次遇到新的字母的时候,则 总质量+=(cnt*c的质量)cnt记录数字串:cnt=-1的时候,代表还没有开始记录。遇到一个 s 为 数字字符 的时候,如果cnt=-1 则 cnt = s - '0' ...原创 2018-06-02 09:50:56 · 1216 阅读 · 1 评论 -
周期串
分析:由周期串的规律可以得出,字符总数 总能整除 周期串字符数,则从第一个(i=0)字符开始遍历,遇到字符串大小 size%i==0,则有可能周期数为 i 。检验:可以通过该字符串与后面的字符串对比,如果全部都相同,则为周期串#include<iostream>using namespace std;int main() { char str[256]; int sz, i...原创 2018-06-02 08:17:39 · 228 阅读 · 0 评论 -
新人环状序列
本人是小白,还请大神多多指教~例子: 有一个长度为 n=3 的字符串 abc, 而环状的abc可以表示成 abc、bca、cab如果程序要在 abc里面获取到 abc、bca、cab ,则在a(包含a)开始向后读取3个字符串 在b(包含b)开始向后读取3个字符串在c(包含c)开始向后读取3个字符串b和c开始向后读取3个字符,读取超出数组范围怎么办?可以看成为 abcabc 从第一个字符index...原创 2018-06-02 07:35:24 · 260 阅读 · 0 评论 -
信息解码(Message Decoding)ACM题目
分析:长度为1的串,可以放1个编码长度为2的串,可以放3个编码长度为3的串,可以放7个编码.....长度为n的串,可以放 n^2 -1 个编码思路:1. 用 1<<n 表示 2^n;2. 读取编码头:用codes[][]存储编码头;Len表示 长度为Len的串value表示 长度为Len的串的第value个值 例如:长度为 3 的第 2 个编码先一次输入多个字符,然后用循环调用g...原创 2018-06-22 21:46:09 · 2274 阅读 · 1 评论 -
第一次写KMP的体会
例子 ↓(不匹配位置 6)T串:a b c a b c (i 表示位置)S串:a b c a b d aaaaaaa (j 表示位置)位置: 1 2 3 4 5 6则 匹配到 a b c a b 则 i5 = j5 ≠ j4 ≠ j3 = j2 ≠ j1所以因为 i5 与 j4 j3 都不相等 所以直接跳过 i5不与 ...原创 2018-05-31 13:31:17 · 153 阅读 · 0 评论 -
ACM题目:救济金发放
思路:1. 使用数组que记录在队伍中的人,数组索引范围是 1~n;2. 用book标记离开队伍的人3.用 left 记录队伍剩下的人数,left=0的时候,就可以结束循环;3.分别从que[p]按顺序,que[q]按逆序遍历数组que,(初始化的时候p=0,q=n+1)。为了防止q和p超出数组索引范围,可以用取余数的方法:1. 顺序读取: p = (p-1+n-1)% n + 1; 2. 逆...原创 2018-06-20 17:56:01 · 632 阅读 · 0 评论 -
LCS算法
本文参考(菜鸟小筑)LCS问题即最长公共子序列问题,它不要求所求得的字符在所给的字符串中是连续的(例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子序列,则输出它们的长度4,并打印任意一个子序列)。事实上,最长公共子序列问题也有最优子结构性质。证明LCS的最优子结构:记:(字符串X) Xi=﹤x1,⋯,xi﹥即X序列的前i个字符 (1≤i≤m)(...原创 2018-06-05 21:34:01 · 2326 阅读 · 0 评论 -
求循环小数的表示以及循环节长度
问题:输入整数a和b,输出a/b的循环小数表示以及其循环节长度。例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21分析:模拟长除法的计算过程。①mod = a%b;②小数 = (mod*10) / b;③mod = (mod*10)%b;循环②③步,当出现重复的余数的时候,也就是循环节出现了例如 3/71. mod = 3%7 = 3;2. m...原创 2018-06-04 21:28:29 · 8369 阅读 · 1 评论 -
象棋 (ACM)
题目:考虑一个象棋藏局,其中红方有n(2<=n<=7)个棋子,黑方只有一个将。红方除了有一个帅(G)之外还有3种可能:车(R),马(H),炮(C),并且需要考虑 “蹩马脚” , 与将和帅不能照面的规则。输入所有棋子的位置,保证局面合法并且红方已经将军。你的任务是判断红方是否已经把黑方将死。 #include<iostream>using namespace ...原创 2018-07-27 20:44:57 · 599 阅读 · 1 评论 -
数数正方形(ACM/ICPC World Finals)
题目:有n行n列(2<=n<=9)的小黑点,还有m条线段连接其中的一些黑点,统计这些线段连成了多少个正方形(每种边长分别统计) 行从上到下编号为1~n,列从上到下编号为1~n。边用 H(i,j) 和 V(i,j)表示, 分别表示 (i,j)-(i,j+1)和(i,j)-(i+1,j)。如图所示最左边的线段用V(1,1)表示。图中包含两个边长为1的正方形和一个边长为2的正方形...原创 2018-08-06 15:25:48 · 971 阅读 · 0 评论 -
最大子段和(分治法)
将长度为n的序列L划分成两个子序列,即 L(1,n/2) 和 L(n/2 + 1 ,n)会出现3种情况:① max{ L(1,n) }=max{ L(1,n/2)}② max{ L(1,n) }=max{ L(n/2 + 1 ,n) }③max{ L(1,n) } = 且求解子问题:对于划分阶段的情况①和②可以递归求解,情况③需要分别...原创 2019-04-09 13:59:44 · 2432 阅读 · 1 评论 -
HUD 5687(字典树)
反思:之前在删除单词的时候,只是删除掉单词前缀以后的字符,而没有把整个单词都删除掉,导致WA了很多次。高手请略过...AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string.h>using namespace std;struct Dic { Dic *nt[26]...原创 2018-12-31 14:08:13 · 135 阅读 · 0 评论 -
2014百度之星 Xor Sum(字典树+贪心)
题目在HDU_OJProblem DescriptionZeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。Prometheus 为了让 Zeus...原创 2018-12-19 13:20:51 · 146 阅读 · 0 评论