
算法
实战经验
LLM(-¥-)
努力赚钱
展开
-
最大子段和--动态规划
给定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#include<iostr原创 2020-12-22 22:29:46 · 170 阅读 · 0 评论 -
多处最优服务次序问题--贪心算法
问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?输入:第一行为两个正整数n和s第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间#include <iostream>#include <algorithm>#include <cstring>#include <cstdio> using nam原创 2020-12-14 10:52:55 · 1478 阅读 · 1 评论 -
1. 最优服务次序问题。--贪心算法
问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)输入:第一行为一个正整数n,表示有n个顾客第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间。#include<iostream>#include<algorithm>using namespace std;#define N 10000 int原创 2020-12-14 09:13:38 · 1303 阅读 · 0 评论 -
6 活动选择问题--贪心算法
假定一个有n个活动(activity)的集合S={a1,a2 ,…,an },这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用。每个活动ai 都有一个开始时间si和一个结束时间fi,其中0<=si<fi <=32767。如果被选中,任务ai发生在半开时间区间[si,fi)期间。如果两个活动ai 和aj满足[si,fi)和[sj,fj)不重叠,则称它们是兼容的。也就说,若si>=fj 或sj>=fi,则ai和aj 是兼容的。在活动原创 2020-12-13 22:21:03 · 482 阅读 · 0 评论 -
4 看电影--贪心算法
终于到周末了,明明是特别喜欢看电影。他想在一天内尽量多的看到完整的多部电影。 现在他把他喜欢的电影的播放时间表给你,希望你能帮他合理安排。输入格式:输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。 接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。 当n=0时,输入结束。输出格式:对于每组输入,输出能完整看到的电影的个数。输入样例:在这里给出一组输入。原创 2020-12-13 21:19:10 · 1724 阅读 · 0 评论 -
装箱问题--贪心算法
1 装箱问题假设有N项物品,大小分别为s1、s2…si…sn,1<<si ≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。输入格式:输入第一行给出物品个数N(≤1000);第二行给出N个正整数si(1≤si≤100,表示第i项物品的大小)。输出格式:按照输入顺序输出每个物品的大小及其原创 2020-12-13 16:22:51 · 1372 阅读 · 0 评论 -
枚举问题之匹配对手
2. 有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。规定A不和J比赛, M不和D及E比赛。列出所有可能的比赛名单。代码实现#include<iostream>#include<algorithm>using namespace std;int main(){ char a[5]={'A','B','C','D','E'}; char b[5]={'J','K','L','M','N'}; int原创 2020-11-19 18:21:43 · 198 阅读 · 0 评论 -
最大子段问题
最大子段和问题。给定由n个整数组成的序列,求序列中子段的最大和,若所有整数均为负整数时定义最大子段和为0。例如, 当(a1,a2,a3,a4 ,a5,a6) = (-2,11,-4,13,-5,-2)时,最大子段和为: a2+a3+a4=20输入格式:第一行输入整数个数n(1≤n≤10000),再依次输入n个整数。输出格式:输出第一行为最大子段和,第二行为子段第一个数和最后一个数在整个序列中的位序。输入样例1:6-2 11 -4 13 -5 -2输出样例1:202 4#incl原创 2020-11-19 10:35:07 · 272 阅读 · 0 评论 -
枚举
1. 由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。 #include<iostream>#include<algorithm>using namespace std;int judge(int a[]){if(a[2]==3||a[3]==3||a[0]==0)return 0;return 1;}int main(){ int a[5]={0,1,2,3,4}; sort(a,a+4);原创 2020-11-19 09:20:49 · 89 阅读 · 0 评论 -
输出全排列
输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。输入格式:一行输入正整数n。输出格式:按字典序输出1到n的全排列。每种排列占一行,数字间无空格。输入样例:3输出样例:123132213231312321#include<algorithm>#include<iostream>using namespace std;int main(){ int n,i,a[7]; cin>&原创 2020-11-17 16:59:51 · 823 阅读 · 0 评论 -
百鸡问题扩展-N鸡问题
N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。有几种买法呢?这就是N鸡问题。输入格式:在一行中输入一个正整数N。(N<500)输出格式:在一行中输出两个整数c s,中间用一个空格隔开,表示N元钱买N只鸡共有 c 种买法,且所有买法的公鸡数量之和是 s。如果无解,则 s 为 -1.输入样例1:100输出样例1:4 24输入样例2:1输出样例2:0 -1代码实现:#include<algorit原创 2020-11-17 16:42:57 · 826 阅读 · 0 评论 -
穷举问题-搬砖
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法?输入格式:输入在一行中给出一个正整数n。输出格式:输出在每一行显示一种方案,按照"men = cnt_m, women = cnt_w, child = cnt_c"的格式,输出男人的数量cnt_m,女人的数量cnt_w,小孩的数量cnt_c。请注意,等号的两侧各有一个空格,逗号的后面也有一个空格。如果找不到符合条件的方案,则输出"None"输入样例:45输出样例:men原创 2020-11-17 16:25:40 · 137 阅读 · 0 评论 -
排序
给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:数据1:只有1个元素;数据2:11个不相同的整数,测试基本正确性;数据3:103个随机整数;数据4:104个随机整数;数据5:105个随机整数;数据6:105个顺序整数;数据7:105个逆序整数;数据8:105个基本有序的整数;数据9:105个随机正整数,每个数字不超过1000。输入格式:输入第一行给出正整数N(≤10 ),随后一行给出N个(长原创 2020-11-17 12:35:10 · 101 阅读 · 0 评论 -
跳一跳
微信小程序中的跳一跳相信大家都玩过。emmm???只学习不玩游戏?那就吃亏了…好好读题理解吧。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8…)。 现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。原创 2020-11-17 12:04:52 · 121 阅读 · 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)请画出度原创 2020-11-16 17:07:09 · 446 阅读 · 0 评论 -
改写二分搜索算法
标题 改写二分搜索算法 (20分)题目来源:《计算机算法设计与分析》,王晓东设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。输入格式:输入有两行:第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。输出格式:输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全原创 2020-11-16 16:22:20 · 764 阅读 · 0 评论 -
递归实现逆序输出整数
递归实现逆序输出整数 (20分)本题目要求读入1个正整数n,然后编写递归函数reverse(int n)实现将该正整数逆序输出。#include<stdio.h>int reverse(int n){ int ch[100]; int i=0; if(n!=0){ ch[i]=n%10; n=n/10; printf("%d",ch[i]); i++; return reverse(n); }原创 2020-11-16 15:58:17 · 1568 阅读 · 0 评论 -
二分查找的递归实现和普通实现
二分查找 (20分)输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。(1)普通实现#include<stdio.h>int find(int a[],int low ,int high,int x){ int mid=0,count =0; while(low<=high){ count++; mid=原创 2020-11-16 15:54:13 · 466 阅读 · 0 评论