基础算法
进阶的小新
这个作者很懒,什么都没留下…
展开
-
多重背包问题
时间限制: 1Sec 内存限制: 128MB题目描述为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力。输入第一行二个数n(n≤500),m(m≤6000),其中n代表希望购买的奖品的种数,m表示拨款金额。接下来n行,每行3个数,v、w、s,分别表示第I种奖品的价格、价值(价格与价值是不同的概念)和能购买的最大数量(买0件到s件均可),其中v≤100,w≤1000,s≤10。输出原创 2022-02-27 23:13:53 · 404 阅读 · 0 评论 -
完全背包问题
时间限制: 1Sec 内存限制: 128MB 提交: 555 解决: 238题目描述设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。输入第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出仅一行,一个数,表示最大总价值。样例输入10原创 2022-02-26 17:22:53 · 333 阅读 · 0 评论 -
01背包问题
时间限制: 1Sec 内存限制: 128MB题目描述一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。输入第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出仅一行,一个数,表示最大总价值。样例输入10 42 13 34 57 9样例输出1.原创 2022-02-26 14:43:23 · 1487 阅读 · 0 评论 -
全排列c/c++实现
题目:给出n个字母,逐行输出所有可能的排列组合。输入在第一行给出一个数字n,接下一行给出n个字母。输出所有可能的排列,每种排列占一行。思路:利用数组内部的有序交换,防止重复,这次我们直接用老板的思维来看待问题,以对ABC进行排列举例,最大老板只需要用A分别与A,B,C进行交换,这里是三种情况三条分支,用循环来控制。下一层有3个同级老板要对BC,AC,BA进行同样的操作,依此类推,详见下图:最顶层老板思维:1.制定好规则,保证下一层老板的行为和所解决的问题是和自己...原创 2022-02-14 22:38:02 · 2808 阅读 · 0 评论 -
字符串匹配之kmp
题目:判断字符串s中是否包含字符串p(长度均小于1000),若包含,则输出第一次在字符串s中出现的下标,否则输出-1,若s长度大于p,也输出s。输入占两行,分别为字符串s和字符串p。输出字符串p在字符串s中第一次出现的下标,若不存在输出-1。案例:输入:babababcbababababbbababb输出:12首先考虑暴力解法,遍历字符串s,每个字符都做一次开头,依次往后遍历与p规模相同的字串,若其中有与字符串p完全匹配的字串,则该这个字串开头字符对应的下标就是答案原创 2022-02-10 20:48:39 · 592 阅读 · 0 评论 -
字符串匹配之Pabinkarp
题目:判断字符串s中是否包含字符串p。输入占两行,分别为字符串s和字符串p。输出包含字符串s中字符串p的起始下标,若有多个匹配则全部输出,每个输出占一行。案例:输入:ABABABAABA输出:024初步探究Pabinkarp算法思路:先算出字符串p的哈希值,逐一遍历s中长度与字符串p相等的子串(连续)(时间复杂度n),算出其哈希值(时间复杂度m)并与字符串p的哈希值做对比,相同则匹配成功,输出即可。该思路时间复杂度为n*m(n和m分别是字符串s和字符串p的长原创 2022-02-09 23:01:21 · 434 阅读 · 0 评论 -
矩阵相乘c/c++实现
题目:第一行输入给出两个数n,m,代表第一个矩阵的行数和列数。随后n行,每行给出m个数。接下去一行给出两个数p,q,代表第二个矩阵的行数和列数。随后p行,每行给出q个数。输出两个矩阵相乘后的结果。案例:输入:2 21 21 -12 31 2 -3-1 1 2输出:-1 4 12 1 -5思路:本题是单纯的矩阵相乘,用3个for循环解决,时间复杂度为n^3,细节见代码:#include <bits/stdc++.h>using nam原创 2022-02-07 23:43:53 · 275 阅读 · 0 评论 -
堆排序c/c++实现
主要有两个步骤,一个是建堆(时间复杂度nlgn),一个是排序(时间复杂度nlgn),总的时间复杂度为nlgn,细节见代码。以下给出下面给出从小到大排序的代码。#include <bits/stdc++.h>using namespace std;void MinHeap(int* A,int n);void MinHeapFixUp(int* A,int i,int n);void Heapsort(int* A,int n);int main() { int A[] =原创 2022-02-01 11:46:08 · 971 阅读 · 2 评论 -
最大子序列和
题目很简单:输入第一行给出一个整数n,随后一行给出n个整数,求该数组的最大子序列和。输出在一行给出求该数组的最大子序列和。拿到这题,首先的想法是用两层循环,外层循环定住一个下标,内层循环为游标,每次进行求和并取最大值,这种思想并不难,时间复杂度为O(n^2),直接上代码#include <bits/stdc++.h>using namespace std;int a[1005];int main(){ int n,sum,ans = 0; cin >> n原创 2022-02-07 15:42:59 · 288 阅读 · 0 评论