![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
nullprtr
这个作者很懒,什么都没留下…
展开
-
LeetCode 1478.安排邮筒 (1、滑动窗口)
给你一个房屋数组houses和一个整数k,其中houses[i]是第 i栋房子在一条街上的位置,现需要在这条街上安排 k个邮筒。请你返回每栋房子与离它最近的邮筒之间的距离的 最小 总和。答案保证在 32 位有符号整数范围以内。示例 1:输入:houses = [1,4,8,10,20], k = 3输出:5解释:将邮筒分别安放在位置 3, 9 和 20 处。每个房子到最近邮筒的距离和为 |3-1| + |4-3| + |9-8| + |10-9| + |20-20|...原创 2021-01-02 23:18:20 · 164 阅读 · 0 评论 -
leetcode-找两个和为目标值且不重叠的子数组 (c++ 滑动窗口 剪枝)
给你一个整数数组arr 和一个整数值target。请你在 arr中找 两个互不重叠的子数组且它们的和都等于target。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1。示例 1:输入:arr = [3,2,2,4,3], target = 3输出:2解释:只有两个子数组和为 3 ([3] 和 [3])。它们的长度和为 2 。示例 2:输入:arr = [7,3,4,7],...原创 2021-01-01 23:58:08 · 161 阅读 · 0 评论 -
最长公共子序列问题(动态规划 C++) 并输出最长公共子序列
若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序原创 2020-12-21 23:51:58 · 1378 阅读 · 0 评论 -
动态规划之最大K乘积问题 (思路+C++实现)
最大k乘积问题问题描述:设X是一个n位十进制整数,如果将X划分为K段,则可得到K个整数,这K个整数的乘积称为X的一个K乘积。请设计算法并编程实现,对于给定的X 和K,求出X的最大K乘积。输入:X,K,n输出:X的最大K乘积这里写的时候没有注意到给n位十进制数,直接选择了使用字符串然后.size()方法获取长度思路:最后求得的k段的数一定是k-1段的前一部分数 * 剩余的那部分数组成的整数,满足最优子结构如果用穷举的思想来考虑,很容易证明满足重复子问题边界:dp[1][j原创 2020-12-21 17:02:16 · 1620 阅读 · 0 评论 -
Pintia 666 (回溯 C++)
小明有一张m*n的好习惯记录卡,记录每一天的好习惯目标达成度(数字0-9表示)。某天目标完成达成,就在当天的格子里写上数字6,目标没有完全达成就写上一个小于6的数字(0-5),目标超额完成就写上一个大于6的数字(7-9)。记录卡上如果能找到一条长度为3的路径并且路径上的三个数字都大于等于6(这里的路径是指从某个格子出发,可以向左、右、上、下格子移动,并且不能重复经过一个格子),则小明就能得到一个“666”奖励。请你帮小明统计下他总共能得到多少“666”奖励。输入格式:输入第一行给出两个正整数m,n原创 2020-12-20 23:53:26 · 376 阅读 · 0 评论 -
回文串问题(动态规划DP C++)
一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。输入格式:任意给定的一个字符串,其长度不超过1000.输出格式:能变成回文串所需添加的最少字符数。输入样例:在这里给出一组输入。例如:Ab3bdAbb输出样例:在这里给出相应的输出。例如:21#include<iostream>#include<str.原创 2020-12-18 22:39:57 · 350 阅读 · 1 评论 -
矩阵链相乘问题(备注 C++)
矩阵的乘法定义如下:设A是m×p的矩阵,B是p×n的矩阵,则A与B的乘积为m×n的矩阵,记作C=AB,其中,矩阵C中的第i行第j列元素cij可以表示为:cij=Σk=1paik×bkj=ai1b1j+ai2b2j+⋯+aipbpj.当多个矩阵相乘时,采用不同的计算顺序所需的乘法次数不相同。例如,A是50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵, 计算ABC有两种方式:(AB)C和A(BC),前一种需要15000次乘法计算,原创 2020-12-17 23:52:57 · 461 阅读 · 0 评论 -
寻宝(动态规划+滚动数组)
小明有一张藏宝图,上面有m*n个房间,每个房间里面都有一个有一定价值的宝物,小明只能从左上角的房间进入收集宝物,且每次只能向右边或向下边的房间继续寻宝,最终只能从最右下的房间出来。请你帮小明计算下他最多可以收集到多少价值的宝物?输入格式:输入第一行给出两个正整数m,n(1=<m,n<=2000),随后给出m行数据,每行都包括n个正整数,中间用空格分割。输出格式:输出收集到的最大价值v,题目保证v<10^9。输入样例:4 41 18 9 37 10 6 125原创 2020-12-16 21:50:42 · 704 阅读 · 0 评论 -
最大子段和(简单思路,c++代码)
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。要求算法的时间复杂度为O(n)。输入格式:输入有两行:第一行是n值(1<=n<=10000);第二行是n个整数。输出格式:输出最大子段和。输入样例:在这里给出一组输入。例如:6-2 11 -4 13 -5 -2输出样例:在这里给出相应的输出。例如:20.原创 2020-12-15 22:06:24 · 491 阅读 · 1 评论 -
工作分配问题(AC c++)
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。输入格式:输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。输出格式:将计算出的最小总费用输出到屏幕。输入样例:在这里给出一组输入。例如:310 2 32 3 43 4 5输出样例:在这里给出相应的输出。例如:9#include<iostream&原创 2020-12-11 23:16:39 · 1032 阅读 · 0 评论 -
试题 历届试题 分考场 C++(AC)
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式 第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式 一行一个整数,表示最少分几个考场。.原创 2020-12-07 23:18:05 · 246 阅读 · 0 评论 -
试题 算法提高 最长滑雪道(深搜AC)
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 小袁非常喜欢滑雪, 因为滑雪很刺激。为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 小袁想知道在某个区域中最长的一个滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。如下: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。 你.原创 2020-12-06 23:29:27 · 163 阅读 · 0 评论 -
最佳调度问题(穷举)
假设有n(n<=20)个任务由k(k<=20)个可并行工作的机器完成。完成任务i需要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 需要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成全部任务的时间最早。输入格式:输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。输出格式:将计算出的完成全部任务的最早时间输出到屏幕。输入样例:在这里给出一组输入。例如:7 32 14 4 16 6 5 3原创 2020-12-05 23:51:56 · 396 阅读 · 0 评论 -
0-1背包C++(回溯、动态规划)
给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)。问:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两个选择:装入或不装入。不能将物品i装入多次,也不能只装入部分物品i。输入格式:共有n+1行输入: 第一行为n值和c值,表示n件物品和背包容量c; 接下来的n行,每行有两个数据,分别表示第i(1≤i≤n)件物品的重量和价值。输出格式:输出装入背包中物品的最大总价值。输原创 2020-12-04 23:20:10 · 139 阅读 · 0 评论 -
八皇后问题
在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上现在我们把棋盘扩展到n×n的棋盘上摆放n个皇后,请问该怎么摆?请编写程序,输入正整数n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。输入格式正整数n(n>0)输出格式若问题有解,则输出全...原创 2020-12-02 23:56:04 · 612 阅读 · 0 评论 -
排序结构(冒泡、选择、希尔、快速)
冒泡排序:void bubble_sort(int x[],int n){ int p=n; for(int i=0;i<n;i++){ for(int j=0;j<p-1;j++){ if(x[j]>x[j+1]){ swap(x[j],x[j+1]); } } p--; }}选择排序:void select_sort(int a[],int n){ int temp; for(int i=0;i<n;i++){ t原创 2020-12-01 23:12:49 · 71 阅读 · 0 评论 -
分形的递归输出+问题思路
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。一个盒状分形定义如下: 度为1的盒分形为:X度为2的盒分形为:X X XX X依次类推,如果B(n-1)表示n-1度的盒分形,则n度的盒分形递归定义如下:B(n - 1) B(n - 1) B(n - 1)B(n - 1) B(n - 1)请画出度为n的原创 2020-11-23 23:29:10 · 161 阅读 · 0 评论 -
循环日程表(递归、分治)
设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。输入格式:输入:M(M<=7)。输出格式:输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。输入样例:3输出样例:在这里给出相应的输出。例如:1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3原创 2020-11-22 23:55:30 · 793 阅读 · 0 评论 -
基尔霍夫矩阵(求最小生成树)
条件:给定一个右n个节点的简单图G(无重边、无自环、无向图),它的基尔霍夫矩阵Q(Q=D-A),Q*(去掉任意一行一列)的行列式(绝对值)即为图G的生成树个数度矩阵Dn*nd(i,j)=deg(vi)--节点i的边数 i==j 否则d(i,j)=0邻接矩阵An*nA(i,j)=1--vi与vj有边相连 否则A(i,j)=0...原创 2020-11-20 22:56:20 · 246 阅读 · 0 评论 -
棋盘覆盖(分治法)详细!!!
棋盘覆盖在一个2^k * 2^k(k为正整数,k<=10,length=2^k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格(其坐标为aa,bb,分别代表行坐标号和列坐标号),以及有四种L型骨牌(如下图)。求用若干块这种L型骨牌实现除该特殊点棋盘的全覆盖。(本题要求采用分治算法做)输入格式:输入三个数,分别是aa,bb,length.输出格式:输出整个棋盘。其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左原创 2020-11-19 23:28:28 · 6844 阅读 · 0 评论 -
常见算法题型,通常算法求解步骤
算法题型:排序、查找、字符串匹配、图、组合、几何、数值算法求解步骤:(仅仅为个人理解)1、分析问题,建立模型理解题目,属于哪一类题型,与哪类题型类似2、设计算法,建立初步求解处理输入(采用哪种数据结构存储)理清数据处理流程3、正确性分析算法是否能正确求解问题4、效率分析时间复杂度、空间复杂度计算是否会超出规定(大致)5、程序实现动手吧...原创 2020-11-17 23:11:48 · 4575 阅读 · 0 评论