自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 动态规划3

给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。在这里插入给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。#include<iostream>using namespace std;#define M

2021-01-15 17:47:14 116

原创 动态规划2

计算矩阵连乘积在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。由该公式知计算C=AB总共需要pqr次的数乘。#include<iostream> using namespace std; #define LEN 6int p[LEN+1]={30,35,15,5,10,20,25};int m[LEN+1][LEN+1]={0,0,0};int s[LEN+1

2021-01-14 18:53:46 100

原创 动态规划1

分析并掌握“最长公共子序列” 问题的动态规划算法求解方法;最长公共子序列问题:若给定序列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={x

2021-01-12 16:15:46 117

原创 6.4寻宝

小明有一张藏宝图,上面有m*n个房间,每个房间里面都有一个有一定价值的宝物,小明只能从左上角的房间进入收集宝物,且每次只能向右边或向下边的房间继续寻宝,最终只能从最右下的房间出来。请你帮小明计算下他最多可以收集到多少价值的宝物?输入格式:输入第一行给出两个正整数m,n(1=<m,n<=2000),随后给出m行数据,每行都包括n个正整数,中间用空格分割。输出格式:输出收集到的最大价值v,题目保证v<10^9。输入样例:4 41 18 9 37 10 6 125 13 4 1

2021-01-10 13:16:21 178

原创 6.3 矩阵链相乘

#include <iostream>#include<string.h>using namespace std;const int MAX = 1005;int p[MAX];int dp[MAX][MAX];int n;void matrix(){ int j; memset(dp,0,sizeof(dp)); for(int r = 2; r<=n; r++) { for(int i = 1; i<=

2021-01-09 09:19:06 92

原创 6.2 回文串问题

一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。输入格式:任意给定的一个字符串,其长度不超过1000.输出格式:能变成回文串所需添加的最少字符数。输入样例:在这里给出一组输入。例如:Ab3bdAbb输出样例:在这里给出相应的输出。例如:21作者高见元单位湖北经济学院代码长度限制16 KB时间限制1000 ms内存限制64 MB#includ

2021-01-08 18:49:05 217

原创 6.1 最大子段和

给定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作者陈晓梅单位广东外语外贸大

2021-01-07 14:13:31 230

原创 回溯3

问题描述:给定集合S,S中有n个正整数,M是一个正整数。子集和问题判定是否存在S的一个子集S1,使得S1中各元素之和等于M。请设计回溯法求解子集和问题,如果问题无解,输出“No Solution”,问题有解,则输出满足子集S1中各元素的值。#include<iostream> using namespace std;#define M 1000 int n; int s; int data[M]; int x[M]={0}; int flag=0; int sum=0;

2021-01-06 11:09:23 78

原创 回溯2

.算法实现题:整数变换问题。整数i的两种变换定义为,(向下取整);设计一个算法求给定两个整数a和b,用最少次数的和变换将整数a变换为b;例如实现提示:观察f和g两个操作可知,f总是使得i变大,g总是使得i变小。因此在决定让x执行哪个操作之前可以先判断i和目标值m之间的大小关系。如果x>m,就让其执行g操作;反之,执行f操作。问题的解分为两种情况,一种是有解,即n可以通过函数变换成m;另一种是无解,即n无法通过函数变换成m。有解的情况比较容易,只需要判断最后的i是否等于m即可。如果i等于m,那么

2021-01-05 18:56:06 67

原创 回溯1

符号三角问题:下面都是“-”。 下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。参考代码如下,请在此基础上,写出主函数,

2021-01-04 11:25:15 80

原创 5.5 工作分配问题

设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。输入格式:输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。输出格式:将计算出的最小总费用输出到屏幕。输入样例:在这里给出一组输入。例如:310 2 32 3 43 4 5输出样例:在这里给出相应的输出。例如:9作者陈晓梅单位广东外语外贸大学代码长度限制16 KB时间限

2021-01-03 08:54:11 150

原创 5.4 整数拆分

将一个正整数拆分成若干个正整数的和。输入格式:一个正整数n输出格式:若干行,每行一个等式(每个数或者等号间都有一个空格,第一个数前没有空格,最后一个数后面没有空格,数与数之间要求非降序排列)。最后一行给出解的总个数输入样例:在这里给出一组输入。例如:4输出样例:在这里给出相应的输出。例如:4 = 1 + 1 + 1 + 14 = 1 + 1 + 24 = 1 + 34 = 2 + 24作者严华云单位湖州师范学院代码长度限制16 KB时间限制400 ms内存限制

2021-01-02 18:54:12 338

原创 5.3 0-1背包

给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)。问:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两个选择:装入或不装入。不能将物品i装入多次,也不能只装入部分物品i。输入格式:共有n+1行输入: 第一行为n值和c值,表示n件物品和背包容量c; 接下来的n行,每行有两个数据,分别表示第i(1≤i≤n)件物品的重量和价值。输出格式:输出装入背包中物品的最大总价值。输入样例:

2021-01-01 12:13:16 149

原创 5.2 N皇后问题

国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。例如:现在我们把棋盘扩展到 n×n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。输入格式正整数 n(n>0)输出格式若问题有解,则输出全部摆法(每两

2020-12-31 15:44:07 306

原创 5.1 最佳调度问题

1 最佳调度问题假设有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-30 11:05:31 379

原创 贪心算法4

多机调度问题利用贪心法设计算法求解如下问题:要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。这个问题是一个NP完全问题,到目前为止还没有一个有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。可以考虑以下的贪心策略:(1)最长处理时间作业优先的贪心选择策略。(2)最短处理时间作业优先的贪心选择策略。(3)作业到达时间优先的贪心选择策略。假设

2020-12-29 17:40:15 119

原创 贪心算法3

最优分解问题。问题描述:设n是一个正整数,要求将n分解为若干互不相同的自然数之和,且这些自然数的乘积最大。输入:正整数n输出:计算的最大乘积。如输入10,则输出30.提示:若a+b=const ,则a-b的绝对值越小,ab值越大。贪心策略:将n分成从2开始的连续自然数之和,如果最后剩下一个数,则将此数在后项优先的方式下均匀地分给前面各项。#include<iostream>using namespace std;int find(int n){ int i=2; int m=

2020-12-28 14:52:50 96

原创 贪心算法2

多处最优服务次序问题。问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?输入:第一行为两个正整数n和s第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间。#include<iostream>#include<vector>#include<algorithm>using namespace std;int

2020-12-27 19:14:17 82

原创 贪心算法1

最优服务次序问题。问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)输入:第一行为一个正整数n,表示有n个顾客第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间。#include<iostream>#include<vector>#include<algorithm>using name

2020-12-26 19:44:20 73

原创 软件项目-设计

一、后台管理子系统二、资讯平台子系统三、数据库设计1.管理员:管理员包括用户名和密码,由管理员预设,不需要注册。2.用户:用户包括用户名、密码、邮箱,用户名唯一,注册用户的邮箱不能相同。3.资迅类型:资讯类型包括类型ID和类型名称。资讯类型由数据库管理员管理,包括新增和删除。4.资讯:资讯包括资讯ID、标题、内容、发布时间、图片以及类型。其中资讯ID唯一,类型与“3.资讯类型”关联。5.公告:公告包括公告ID、标题、内容。其中公告ID唯一。...

2020-12-25 19:58:04 267

原创 软件项目-UML图

2020-12-24 18:28:06 305 1

原创 软件项目-需求分析

需求分析一、用户需求通过校园资讯平台,用户可以在平台发布资讯(如勤工助学招工兼职,创新创业项目团队招人,校园轶事等),用户也可根据个人的需求在平台找相关资讯并联系相关负责人。二、1.登录与注册没有账号的用户可以申请注册一个账号。所有希望通过资讯平台发布消息,留言或实现其他功能的用户必须使用账号登录。2.个人信息管理用户可以对自己的个人基本信息进行管理,包括增加,删除,修改,查询等。个人的基本信息应包括姓名,性别,所在班级(职位,任教),电话,QQ。3.发布资讯用户只有注册登录后才有资格发布

2020-12-23 18:58:37 133

原创 4.6 活动选择问题

6 活动选择问题假定一个有n个活动(activity)的集合S={a​1 ,a​2​​ ,…,an​​ },这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用。每个活动a​i都有一个开始时间s​i和一个结束时间f​i​​ ,其中0<=s​i​​ <f​i<=32767。如果被选中,任务a​i发生在半开时间区间[s​i​​ ,f​i​​ )期间。如果两个活动a​i和a​j​​ 满足[si,f​i​​ )和[s​j,f​j)不重叠,则称它们是兼容的。也就

2020-12-22 09:36:26 740

原创 4.5 喷水装置

每组数据的第一行是整数n、L和W的值,其中n≤10 000。接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径。如图1所示的示意图是样例输入的第一组数据所描述的情况。ttt.jpg图1输出格式:对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开还不能浇灌整块草坪,则输出-1。输入样例:38 20 25 34 11 27 210 213 316 219 43 10 13 59 36 13 10 15 31 19 1

2020-12-21 14:19:13 70

原创 4.4看电影

终于到周末了,明明是特别喜欢看电影。他想在一天内尽量多的看到完整的多部电影。 现在他把他喜欢的电影的播放时间表给你,希望你能帮他合理安排。输入格式:输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。 接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。 当n=0时,输入结束。输出格式:对于每组输入,输出能完整看到的电影的个数。输入样例:在这里给出一组输入。

2020-12-20 12:54:49 156

原创 4.3 最优合并问题

题目来源:王晓东《算法设计与分析》给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。输入格式:第一行有 1 个正整数k,表示有 k个待合并序列。 第二行有 k个正整数,表示 k个待合并序列的长度。输出格式:输出最多比较次数和最少比较次数。

2020-12-19 17:19:06 248 1

原创 4.2 月饼

不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。输出格式:对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。输入样例:3 2018 15 1075 72 45输出样例:94.50作者陈越单位浙江大学代码长度限制16 KB时间限制150 ms

2020-12-18 10:26:00 76

原创 4.1装箱问题

输入样例:860 70 80 90 30 40 10 20输出样例:60 170 280 390 430 140 510 120 25#include<iostream> using namespace std; #define max 10000 int box[max]; int goods[max]; int s[max];int main(){ int n; int count; count=0; cin>>n;

2020-12-16 16:49:27 78

原创 递归与分治5

半数集#include<iostream> using namespace std; int fac(int n){ if(n==1) return 1; if(n%2==0) return fac(n/2)+fac(n-1); else return fac(n-1);}int main(){ int n; cin>>n; cout<<fac(n)<<endl; return 0;}.

2020-12-15 10:02:04 54

原创 递归与分治4

#include<iostream>#include<ctime>using namespace std;#define N 100int fibonacci(int n){ if (n <= 2) return n; return fibonacci(n-1)+fibonacci(n-2);}int main(){ int n; cin>>n; cout<<"有"<<fibonacci(n)<<"种走

2020-12-14 11:38:04 43

原创 递归与分治3

#include<iostream>using namespace std;int count=0;void fac(int n){ if(n==1){ cout<<count<<endl; return; } if(n%2==0){ n=n/=2; } else{ n=n*3+1; } count++; fac(n);}int main(){ int n; cin>>n; fac(n); return 0;

2020-12-13 08:47:13 96 1

原创 递归与分治2

将递归函数改为尾递归,或者是递推函数,求第47, 48, 49, 50, 51,52个Fibonacci数所花费的时间,观察效率是否得到提高。#include<iostream>#include<ctime>using namespace std;#define N 100int fibonacci(int n){ if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2);}int main()

2020-12-12 13:22:55 81

原创 递归与分治1

Fibonacci数列无穷数列1,1,2,3,5,8,13,21,34,55,……,称为Fibonacci数列。它可以递归地定义为:第n个Fibonacci数可递归地计算如下:int fibonacci(int n){if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2);}编写完整的主函数,分别记录利用上述递归函数求第47, 48, 49, 50, 51,52个Fibonacci数所花费的时间。代码:#include&l

2020-12-11 17:28:31 64

原创 枚举与递归5

有n阶台阶,可以一次一阶,也可以一次两阶,有几种走法?#include<iostream>using namespace std;int bing(int n){ int max; max=0; while(n!=1){ if(n%2==0){ n=n/2; } else{ n=n*3+1; } if(n>max) max=n; } return max;}int main(){ long n; cin>>n; int max;

2020-12-10 21:23:16 38

原创 枚举与递归4

海盗分金币#include<iostream>using namespace std;int main(){ for(int i = 1000;i < 100000;i++) { int a,b,c,d,e; if((i + 1) % 5 != 0) continue; a = (i + 1) / 5 - 1; if((i - a + 1) % 5 != 0) continue; b = (i - a + 1) / 5

2020-12-09 21:28:44 40

原创 枚举与递归3

有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。规定A不和J比赛, M不和D及E比赛。列出所有可能的比赛名单。#include<iostream>using namespace std;int main(){ char a[5]={'A','B','C','D','E'}; char b[5]={'J','K','L','M','N'}; for(int i=0;i<5;i++){ for(int j=0;j

2020-12-08 09:37:22 71

原创 枚举与递归2

最大子段和问题。给定由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#include

2020-12-07 10:48:05 104

原创 枚举与递归1

由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。#include<iostream>using namespace std;int main(){ int a[5]={0,1,2,3,4}; int b[4]={0,1,2,4}; int c[4]={0,1,2,4}; int d[5]={0,1,2,3,4}; int e[4]={1,2,3,4}; int s; s=0; for(int i=0;i<5

2020-12-06 13:05:46 119

原创 3.6循环日程表

设有N个选手进行循环比赛,其中N=2​M​​ ,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。输入格式:输入:M(M<=7)。输出格式:输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。输入样例:3输出样例:在这里给出相应的输出。例如:1 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5 8 7 2

2020-12-05 10:47:43 131

原创 3.5棋盘覆盖

在一个2^k * 2k(k为正整数,k<=10,length=2k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格(其坐标为aa,bb,分别代表行坐标号和列坐标号),以及有四种L型骨牌(如下图)。求用若干块这种L型骨牌实现除该特殊点棋盘的全覆盖。(本题要求采用分治算法做)输入格式:输入三个数,分别是aa,bb,length.输出格式:输出整个棋盘。其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左上,右上,右下,左下的顺时针顺序

2020-12-04 09:59:38 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除