
算法
本科期间算法课程的练习题合集
Augender
这个作者很懒,什么都没留下…
展开
-
最大子段和
问题 F: 最大子段和[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述给定n个整数(可能是负数)组成的序列a[1], a[2], a[3], …, a[n],求该序列的子段和如a[i]+a[i+1]+…+a[j]的最大值。输入每组输入包括两行,第一行为序列长度n,第二行为序列。输出输出字段和的最大值。样例输入 Copy5-1 0 1 2 3样例输出 Copy6import java.util.Scanner;pub原创 2021-04-24 14:11:39 · 121 阅读 · 0 评论 -
Welcome
问题 A: Welcome[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述”How happy we are, To meet friends from afar!”Welcome to Hunan University of Chinese Medicine!Hope all of you can enjoy the competition ^ v ^Now your task is to read an integer w an原创 2021-04-18 08:49:12 · 88 阅读 · 0 评论 -
eclipse不小心关闭了下方控制台怎么办
点击工具栏上的“window”->perspective->reset perspective就欧啦原创 2021-04-22 19:34:04 · 400 阅读 · 0 评论 -
牛牛的字符串
问题 E: 牛牛的字符串[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述牛牛有两个字符串(可能包含空格),他想找出其中最长的公共连续子串的长度,希望你能帮助他。例如:两个字符串分别为"abede"和"abgde",结果为2。输入每组数据包括两行,每行为一个字符串。输出输出最长的公共连续子串的长度。样例输入 Copyabedeabgde样例输出 Copy2GPLv2 licensed by HUSTOJ 2021imp原创 2021-04-24 14:09:34 · 453 阅读 · 0 评论 -
X外星人基因(最长公共子序列变形)
题目描述X星人的基因由A、B、C、D、E五种不同的结构组合而成。如果两个性别不同的X星人的基因序列相似度大于50%,按照X星的法律他们是禁止结婚的,等于50%据说还是可以的。那么基因的相似度怎么计算呢?分别从两个人身上取长度均为N的基因片段,如果它们的最长公共子序列为M,则相似度=M/N。是不是很简单呢?现在给你两段X星人的基因序列片段,请你判断他们是不是可以结婚?输入每一组测试数据包含3行,第1行数字N表示待比较基因序列片段的长度,N<=10^3。第2行和第3行为两个长度为N的基因序原创 2021-05-11 20:24:37 · 422 阅读 · 0 评论 -
矩阵连乘求最优解
题目描述使用动态规划算法求解矩阵连乘问题。输入每组数据包括两行,第一行为数组长度n,第二行为存储矩阵维数的一维数组。输出矩阵连乘最优计算次序。样例输入 Copy730 35 15 5 10 20 25样例输出 CopyA[2:2] * A[3:3]A[1:1] * A[2:3]A[4:4] * A[5:5]A[4:5] * A[6:6]A[1:3] * A[4:6]*求最优解就是把加括号过程写出来*import java.util.Scanner;public clas原创 2021-05-02 10:23:59 · 1364 阅读 · 0 评论 -
最长公共子序列问题之求完整解
问题 D: 最长公共子序列问题(LCS)-构造LCS[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述使用动态规划算法求两个序列的最长公共子序列,需构造一条最长公共子序列。输入每组输入包括两行,每行包括一个字符串。输出两个字符序列的一条最长公共子序列。(输入已确保最长公共子序列的唯一性)样例输入 Copyacdbxxccdxx样例输出 Copycdxximport java.util.Scanner;public c原创 2021-04-24 14:06:32 · 239 阅读 · 0 评论 -
石子合并动态规划(矩阵连乘的变形)
问题 F: 石子合并问题[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。例如:输入{1,2,3,4,5},输出33。【3+6+9+15=33】输入本题应该处理到文件尾,每组输入包括两行,第一行为石子堆的个数n,第二行则为每堆石子的个数。输出输出最小花费。样例输入 Copy原创 2021-05-02 09:54:42 · 262 阅读 · 0 评论 -
最大子段和升级版(将起止点写出来)
题目描述使用动态规划算法求整数数组(可能包含负整数)的最大子段和,以及和最大子段的起始位置和结束位置:例如:输入数组(6,-1,5,4,-7),输出14, 1, 4,其中14表示最大子段和,1表示和最大的子段从第1个数字开始,4表示和最大的子段到第4个数字结束,即(6, -1 , 5, 4)。输入每组输入两行,第1行为数组中包含的整数个数n,第2行为n个整数(可能包含负整数),两两之间用空格隔开。输出输出最大子段和,以及和最大子段的起始位置和结束位置,两两之间用空格隔开。样例输入 Copy5原创 2021-05-02 10:28:36 · 471 阅读 · 0 评论 -
最长公共子序列问题(LCS)之备忘录法
问题 B: 最长公共子序列问题(LCS)之备忘录法[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述使用备忘录法求解两个序列的最长公共子序列的长度。输入每组输入包括两行,每行包括一个字符串。输出两个序列的最长公共子序列的长度。样例输入 CopyACBCDABDABDCABA样例输出 Copy5import java.util.Scanner;public class Main { static int c[][]=原创 2021-04-24 14:04:08 · 1486 阅读 · 0 评论 -
最长单调子序列
题目描述给出一个序列a1,a2,a3,a4,a5,a6,a7…an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质:s1<s2<s3<…<sn并且这个子序列的长度最长。输出这个最长子序列的长度,要求时间复杂度为O(n2)。输入每组输入包括两行,第一行为序列长度n,第二行为序列。输出输出最长递增子序列的长度。样例输入 Copy71 7 3 5 9 4 8样例输出 Copy4import java.util.Scanner;public原创 2021-05-11 20:19:19 · 336 阅读 · 0 评论 -
最长公共子序列问题(LCS)之动态规划法
问题 C: 最长公共子序列问题(LCS)之动态规划法[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述使用动态规划算法求解两个序列的最长公共子序列的长度。输入每组输入包括两行,每行包括一个字符串。输出两个序列的最长公共子序列的长度。样例输入 CopyACBCDABDABDCABA样例输出 Copy5import java.util.Scanner;public class Main { public static原创 2021-04-24 14:05:12 · 396 阅读 · 0 评论 -
数字三角形之动态规划
#include <stdio.h>#include <stdlib.h>int max(int x,int y){return x>y?x:y;}int main(){ int n; int a[100][100]; int p[100][100]; while(~scanf("%d",&n)){ for(int i=1;i<n+1;i++){//从(1,1)开始 for(i原创 2021-04-18 08:47:18 · 82 阅读 · 0 评论 -
出列人数(最长递增子序列变形)
题目描述有N位同学站在一排,体育老师要请其中的(N-K)位同学出列,将剩下的K位同学从左到右依次编号为1,2,3,…K,他们的身高分别为T1,T2,T3,…TK,要求满足T1<T2<T3<…<TK。已知N位同学的身高,请设计一个算法,计算最少需要几位同学出列可使得剩下的同学满足上述要求。输入多组输入,对于每一组测试数据,第1行N表示同学数量(n<=1000)。第2行包含N个正整数,分别表示每一个同学`的身高。(单位:厘米)输出输出最少需要出列的同学人数。样例输入原创 2021-05-11 20:27:48 · 370 阅读 · 0 评论 -
斜线最大最小值
题目描述求如图所示一个上三角矩阵中每一条斜线中的最大元素(L)和最小元素(S)。输入每组输入包括两部分,一部分为数字n,表示三角矩阵的行数。第二部分即为三角矩阵。输出每一个对角线输出一行,每行包括Lx=Max, Sx=Min,其中x为斜线序号(序号从1开始),Max为该斜线上的最大值,Min为该斜线上的最小值。样例输入 Copy61 3 5 7 11 200 6 8 2 3 130 0 7 4 8 90 0 0 18 3 100 0 0 0 12 60 0 0 0 0 15样例原创 2021-05-02 10:32:24 · 406 阅读 · 0 评论 -
0-1背包(dp)
题目描述给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,背包的容量为C。如何选择装入背包的物品,可以使得装入背包中物品的总价值最大?输入每组输入包括三行,第一行包括物品个数n,以及背包容量C。第二、三行包括两个一维数组,分别为每一种物品的价值和重量。输出输出包括两行,第一行为背包的最大总价值,第二行为所选取的物品。例如:最大总价值=15,物品选取策略为11001。数据保证答案唯一。样例输入 Copy5 106 3 5 4 62 2 6 5 4样例输出 Copy1511原创 2021-05-11 20:22:16 · 131 阅读 · 0 评论 -
矩阵连乘动态规划
题目描述使用动态规划算法求解矩阵连乘问题,输出最少乘法次数。输入每组数据包括两行,第一行为数组长度n,第二行为存储矩阵维数的一维数组。输出矩阵连乘最优计算次数。样例输入 Copy730 35 15 5 10 20 25样例输出 Copy15125import java.util.Scanner;public class juzhenliancheng2 { static int m[][]; static int p[]; static int n; public stat原创 2021-05-02 10:04:38 · 479 阅读 · 0 评论 -
矩阵乘法
问题 H: 矩阵乘法[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述设M1和M2是两个n×n的矩阵,使用分治法计算M1×M2 的乘积。n为2^k,且k<=10。输入一个整数n表示矩阵的维数,接下来n行为第一个矩阵,再下面n行为第二个矩阵。输出矩阵的乘积(两个数字之间空一格,数字右对齐)。样例输入 Copy21 12 23 34 4样例输出 Copy7 714 14#include <stdio.h原创 2021-04-18 09:46:19 · 286 阅读 · 0 评论 -
滚球游戏(数字三角形的变形)
问题 F: 滚球游戏[命题人 : admin]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述某滚球游戏规则如下:球从入口处(第一层)开始向下滚动,每次可向下滚动一层,直到滚至最下面一层为止。球每次可滚至左下、下方或右下三个方格中的任意一个,每个方格都有一个得分,如样例所示。第1层有1个方格,第2层有3个方格,……,以此类推,第n层有2n-1个方格。设计一个算法,使得球从入口滚至最下面一层的总得分和最大。输入对于每个样例,第1行的正整数n表示数字三角形的行数。(n<=原创 2021-04-18 09:05:04 · 1080 阅读 · 3 评论 -
矩阵连乘备忘录法
题目描述使用备忘录法求解矩阵连乘问题,输出最少乘法次数。输入每组数据包括两行,第一行为数组长度n,第二行为存储矩阵维数的一维数组。输出矩阵连乘最优计算次数。样例输入 Copy730 35 15 5 10 20 25样例输出 Copy15125备忘录法的结构本质还是递归*数组表示的是维数,例如第一个矩阵的维数是p[0]*p[0],第二个矩阵的维数是p[1]p[2].。。import java.util.Scanner;public class juzhengliancheng {原创 2021-05-02 10:12:42 · 1407 阅读 · 0 评论 -
XP的点滴
题目描述XP一不留神感冒了,于是跑到校医院打点滴。打点滴真是无聊啊,他看到盐水一滴一滴地滴下来,突然想到一个问题:如果盐水有规律地滴下,先滴一滴,停一下;然后滴二滴,停一下;再滴三滴,停一下…,假设这瓶盐水一共有n毫升,每一滴是y毫升,每一滴需要的时间是一秒(假设最后一滴不到y毫升,需花费的时间也算一秒),停一下的时间也是一秒。请问XP多久能挂完这瓶盐水呢?输入单组输入数据n y (0<n,y<=1000)输出输出一行结果样例输入 Copy10 1样例输出 Copy13#i原创 2021-05-23 17:50:41 · 118 阅读 · 0 评论 -
最小生成树(Prim)
题目描述使用Prim算法求图的最小生成树(MST)输入每组数据分为两个部分,第一部分为图的点数n,和边数m,第二部分为m行,每一行输入三个数字,前两个为两个顶点的编号,第三个为边权重。输出最小生成树,输出时按照边的两个端点的升序输出。(先看左端点,再看右端点,端点不换位置)样例输入 Copy3 30 1 100 2 151 2 50样例输出 Copy0 1 100 2 15#include <iostream>#include <algorithm>原创 2021-05-23 18:36:56 · 485 阅读 · 0 评论 -
汽车加油(贪心)
题目描述一辆汽车加满油后可以行驶n千米。旅途中有k个加油站。若要使沿途的加油次数最少,请设计一个有效的算法。输入第一行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油,且在第0个加油站满油不算加油,第k+1个加油站表示目的地。(请处理到文件尾)输出最少加油次数。如果无法到达目的地,则输出“No Solution”。样例输入 Copy7 71 2 3 4 5原创 2021-05-15 18:46:57 · 268 阅读 · 0 评论 -
回溯基础阶段
油田问题题目描述输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),即属于同一个八连块。输入多组输入输入行数m,以及列数n。然后输入*和@1<=n,m<=100输出联通块个数样例输入 Copy5 5****@@@@@**@@@@@@@**@样例输出 Copy2#include <bits/stdc++.h>using namespace std;int idx[105][105原创 2021-06-05 09:45:14 · 199 阅读 · 0 评论 -
安置路灯(贪心)
题目描述小Q正在给一条长度为n的道路设计路灯安置方案。为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用’.‘表示, 不需要照亮的障碍物格子用’X’表示。小Q现在要在道路上设置一些路灯, 对于安置在pos位置的路灯, 这盏路灯可以照亮pos - 1, pos, pos + 1这三个位置。小Q希望能安置尽量少的路灯照亮所有’.‘区域, 希望你能帮他计算一下最少需要多少盏路灯。输入输入的第一行包含一个正整数t(1 <= t <= 1000), 表示测试用例数接下来每两行一个测试原创 2021-05-15 18:41:40 · 150 阅读 · 0 评论 -
XP的午餐(0-1背包变形)
题目描述XP每天都会思考一个问题,今天午餐去哪里吃?这是一个很重要的问题,这会影响到他下午的体力值。他的午餐预算是M元,现在有N种菜品,每一种菜品的价格和能够提供的体力值已知(每种菜品只能选择一次),请问如何选择菜品能够让XP下午的体力值最大呢?输入多组输入第一行:M元和菜品数量N。接下来N行,每一行两个整数,分别表示每一种菜品的价格(vi)和能够获得的体力值(wi)。(0<N<=20,0<=M<=1000)(0<=vi<=50,0<=wi<=10原创 2021-05-11 20:28:59 · 193 阅读 · 0 评论 -
最少硬币(贪心)
题目描述假设有4种硬币,它们的面值分别为1分、5分、10分和25分。现在要找给顾客n分钱。请问怎样找零钱才能使给顾客的硬币个数最少?输出所需最少硬币的枚数。输入输入需要找给顾客的零钱n(单位:分)。输出输出所需最少硬币的枚数。样例输入 Copy81063样例输出 Copy416#include <stdio.h>#include <stdlib.h>int main(){ int n; int a[]={25,10,5,1};原创 2021-05-15 18:42:52 · 904 阅读 · 0 评论 -
最优装载问题
题目描述使用贪心算法求解最优装载问题。输入每组输入包括两部分,第一行包括集装箱个数n,以及船的装载量C。接下来n行每行则输入集装箱编号以及其重量。输出输出包括两行,第一行为最多可装载的集装箱数量 。第二行则为最优装载方案对应的所有集装箱编号(按照装载次序输出,用空格隔开) 。样例输入 Copy5 101 12 23 34 45 5样例输出 Copy41 2 3 4#include <iostream>#include <algorithm>u原创 2021-05-23 18:24:53 · 628 阅读 · 0 评论 -
最少素数
题目描述小X刚刚学习了素数的定义,现在给定一个正整数N,小X希望知道N最少表示成多少个素数的和。素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。提示哥德巴赫猜想:任意大于2的偶数都可以拆分成两个质数之和。该猜想尚未严格证明,但暂时没有找到反例。输入输入一个正整数n(n<=1e9)。多组输入。输出组成n的素数个数。样例输入 Copy36样例输出 Copy12提示3本身就是1个素数。6可以表示为3 + 3,注意同样的素数可以使用多次。#includ原创 2021-05-15 18:38:44 · 886 阅读 · 1 评论 -
图书排序
题目描述某图书销售管理系统需要对图书(Book)进行排序,每一本图书包含书名(bookName)、销量(bookSales)、价格(bookPrice)等属性,要求先按照销量由大到小排序,对于销量相同的图书再按照价格由小到大排序。输入每组输入包括两个部分,第一部分为书的数量n,接下来n行则为n本书的信息。 按顺序输入书名(不超过20个字)、销量、价格。输出输出排序后的信息,每个属性用空格隔开样例输入 Copy7C++程序设计 120 25.00软件工程 96 48.00高等数学 80原创 2021-05-15 18:44:39 · 1923 阅读 · 0 评论 -
复习题(1)
这里写目录标题问题 A: yangftc的时间安排一级目录一级目录一级目录一级目录一级目录一级目录问题 A: yangftc的时间安排题目描述yangftc需要安排他的时间,有很多事情做,每个事情都有固定的开始和结束时间,因为yangftc每次只能做一件事情,如果有两个或者多个事情的时间重合了那么他就会说 NO,否则他就会说 YES 。输入第一个数字t代表样例数量,后面t个样例,每个样例输入一个n表示事情的数量,后面n行每行两个数字l r表示这个事情的开始和结束时间;输出判断yangftc原创 2021-06-20 18:01:03 · 984 阅读 · 0 评论 -
XP的素数
题目描述XP最近对素数很痴迷,特别是那些特殊的素数,其中有一类素数被称为孪生素数。其定义如下:如果一个数k是素数,k+2也是素数,那么k和k+2成为一对孪生素数。请计算一个给定区间m和n(0<m<n)中孪生素数对的个数。输入单组输入数据m n(0<m<n<1000)输出请输出一行结果:区间[m,n]中孪生素数对的个数样例输入 Copy1 999样例输出 Copy35#include <stdio.h>#include <stdlib.原创 2021-05-23 17:49:08 · 191 阅读 · 0 评论 -
部分回顾题
这里写目录标题菱形图案牛妹的蛋糕尼科彻斯定理ABC + DEF = GHI菱形图案KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的菱形图案。输入多组输入,一个整数(2~20)。输出针对每行输入,输出用“”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。样例输入 Copy234样例输出 Copy#include <stdio.h>#include <stdlib.h>int main(){原创 2021-06-05 08:57:40 · 220 阅读 · 0 评论 -
XP的小视频
题目描述XP的表哥为他推荐了一些学习计算机编程的小视频,这些视频的播放时间长短不完全相同。现在给定一段时间,你能告诉XP他最多可以看多少个视频吗?每个视频的播放时间和给定的总时间均用分钟为单位。输入单组输入数据第一行为m nm为给定时间长度(分钟)(0<n,m<=1000)n表示视频个数接下来是n个整数代表每个视频的播放时间(每个视频播放时间为不超过1000的正整数)输出输出一个整数代表XP最多可以看的视频数。样例输入 Copy84 665 46 18 76 79 3样原创 2021-05-23 18:25:57 · 310 阅读 · 0 评论 -
还有两个
0-1背包问题(回溯法)题目描述有n个物品,第i个物品重量为wi,价值为vi,现有一背包容量为C,要求把物品装入背包得到最大价值,并且要求出这些选取的物品。 要求用回溯法求解。输入多组测试数据,请处理到文件尾,一个整数表示物品的数量n,后一行有n个整数,代表价值,再后一行有n个整数,代表重量,最后有一个整数C代表背包容量,1<=n<=15,1<=vi<=30,1<=wi<=30,1<=C<=80。输出背包的最大总价值和所选取的物品,如果选取的方案有原创 2021-06-24 23:17:19 · 145 阅读 · 0 评论 -
快速排序(java)
快速排序题目描述编程实现快速排序算法,深入理解快速排序算法的基本思想。输入多组输入,每组第一个数字为数组长度,然后输入一个一维整型数组。输出输出快速排序之后的一维整型数组(升序)样例输入 Copy6 1 8 6 5 3 45 12 42 2 5 8样例输出 Copy1 3 4 5 6 82 5 8 12 42import java.util.Scanner;public class Main { public static void main(String[] args)原创 2021-04-01 20:23:10 · 122 阅读 · 0 评论 -
数字三角形之备忘录法(c语言)
问题 D: 数字三角形之备忘录法[命题人 : 201501010119]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述如下图所示的数字三角形,从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。编写一个程序求出最佳路径上的数字之和。 【使用备忘录法实现】 7 3 8 8 1 22 7 4 44 5 2 6 5输入多组样例输入,每组第一行输入三角原创 2021-04-15 21:06:17 · 621 阅读 · 0 评论 -
求第k大元素(Java)
其实就是在求第k小元素的基础上就第n-k+1小元素,也可以自己去改动条件,但我懒,嘿嘿import java.util.Random;import java.util.Scanner;public class find_kk { public static void main(String[] args) { // TODO Auto-generated method stubScanner sc=new Scanner(System.in);while(sc.hasNext()) {原创 2021-04-15 21:09:30 · 200 阅读 · 0 评论 -
数组合并
```javaimport java.util.Scanner;public class shuzuhebing { public static int[] Merge(int sr[],int s,int m,int t) { int i=s,j=m+1,k=s; int tr[]=new int[t+1]; while(i<=m&&j<=t) { if(sr[i]<sr[j]) tr[k++]=sr[i++]; else .原创 2021-04-08 20:32:58 · 114 阅读 · 0 评论 -
整数划分问题之备忘录法
问题 C: 整数划分问题之备忘录法[命题人 : admin]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述使用备忘录法编写一个程序,求一个正整数n的所有划分个数。例如,输入3,输出3;输入4,输出5。输入多组输入,每一组是一个正整数n。输出输出划分数。样例输入 Copy34样例输出 Copy35#include <stdio.h>#include <stdlib.h>int a[110][110];int hua(int原创 2021-04-15 21:12:31 · 614 阅读 · 0 评论