![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
SuperSources
这个作者很懒,什么都没留下…
展开
-
十行代码一重循环实现C++在指定范围内生成指定数量的不重复随机数
在[a,b]中生成n个不重复的随机数可以使用srand()来设置rand()产生随机数时的随机数种子,设置不同的种子可以获取不同的随机数序列。可以利用srand((int)(time(NULL))的方法,利用系统时钟,产生不同的随机数种子。需要调用time(),所以要加入头文件< ctime >。(这里用了万能头文件)#include<bits/stdc++.h>using namespace std;int main(){ srand((int)time(0))原创 2020-06-11 01:37:56 · 2798 阅读 · 0 评论 -
【算法】n皇后问题
描述在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在n×n格的棋盘上放置n个皇后,任何两个皇后不放在同一行或同一列或同一斜线上。编程要求:找出一个n×n格的棋盘上放置n个皇后并使其不能互相攻击的所有方案。输入输出输入5输出1 3 5 2 41 4 2 5 32 4 1 3 52 5 3...原创 2020-04-15 20:07:26 · 6463 阅读 · 0 评论 -
【算法】ZOJ1161-Gone Fishing
描述约翰有h(1≤h≤16)个小时的时间,在该地区有n(2≤n≤25)个湖,这些湖刚好分布在一条路线上,该路线是单向的。约翰从湖1出发,他可以在任一个湖结束钓鱼。但他只能从一个湖到达另一个与之相邻的湖,而且不必每个湖都停留。假设湖i(i=1~n—1),以5分钟为单位,从湖i到湖i+1需要的时间用ti(0<ti≤192)表示。例如t3=4,是指从湖3到湖4需要花20分钟时间。已知在最初5分钟,...原创 2020-04-15 17:10:58 · 293 阅读 · 0 评论 -
【算法】ZOJ1025-Wooden Sticks
描述现有n根木棒,已知它们的长度和重量。要用一部木工机一根一根地加工这些木棒。该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模版的。木工机需要的准备时间如下:(1)第一根木棒需要1min的准备时间;(2)在加工了一根长为l ,重为w的木棒之后,接着加工一根长为l ’ (l ≤ l’ ),重为 w’ ( w≤w’)的木棒是不需要任何准备时间的,否则需要一分钟的准备时间。给...原创 2020-04-15 17:03:51 · 290 阅读 · 0 评论 -
【算法】利用贪心策略求解背包问题
描述给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 ,价值wi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。有两类背包问题(根据物品是否可以分割),如果物品不可以分割,称为0—1背包问题(动态规划);如果物品可以分割,则称为背包问题(贪心算法)。分析有3种方法来选取物品:(1)当作0—1背包问题,用动态规划算法,获得最优值220;(2)当作0—1背包问...原创 2020-04-15 16:56:03 · 3262 阅读 · 0 评论 -
【算法】利用动态规划实现0-1背包问题
描述给定一个物品集合s={1,2,3,…,n},物品i的重量是wi,其价值是vi,背包的容量为W,即最大载重量不超过W。在限定的总重量W内,我们如何选择物品,才能使得物品的总价值最大。分析如果物品不能被分割,即物品i要么整个地选取,要么不选取;不能将物品i装入背包多次,也不能只装入部分物品i,则该问题称为0—1背包问题。如果物品可以拆分,则问题称为背包问题,适合使用贪心算法。建立计...原创 2020-04-15 16:41:07 · 2307 阅读 · 0 评论 -
【算法】利用动态规划实现最大子段和
描述代码#include <stdio.h>#define NUM 1001int a[NUM];int MaxSum(int n){ int sum=0; int b=0; for (int i=1; i<=n; i++) { if (b>0) b+=a[i]; e...原创 2020-04-15 13:01:29 · 921 阅读 · 0 评论 -
【算法】利用分治法实现最大字段和
描述分析代码#include<iostream>using namespace std;int MaxSum(int a[ ], int left, int right){ int sum=0; int center,leftsum,rightsum,s1,lefts,i,s2,rights,j; if (left==right) ...原创 2020-04-15 11:34:15 · 1246 阅读 · 0 评论 -
【算法】输油管道问题
描述某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?给定n口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。输入第1行是一个整数n,...原创 2020-04-15 09:38:52 · 3499 阅读 · 1 评论 -
【算法】整数划分问题
描述整数划分问题是算法中的一个经典命题之一。把一个正整数n表示成一系列正整数之和:正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数称为正整数n的划分数,记作P(n) 。正整数6有如下11种不同的划分,所以P(6)=11。65+14+2, 4+1+13+3, 3+2+1, 3+1+1+12+2+2, 2+2+1+1, 2+1+1+1+11+1+1+1+1+1输入输出...原创 2020-04-15 09:27:00 · 8189 阅读 · 0 评论 -
【算法】铺方砖
描述有 2 * n的一个长方形方格,用一个1*2的骨牌铺满方格。编写一个程序,试对给出的任意一个n(n>0), 输出铺法总数。输入输出样例分析采用递推方法归纳出问题解的一般规律。 (1)当n=1时,只能是一种铺法,铺法总数有示为x1=1。 (2)当n=2时:骨牌可以两个并列竖排,也可以并列横排,再无其他方法,如下左图所示,因此,铺法总数表示为x2=2; (3)当n=3时:骨...原创 2020-04-15 09:13:10 · 752 阅读 · 0 评论 -
【算法】数字三角形
描述如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。 1、 一步可沿左斜线向下或右斜线向下走;2、 三角形行数小于等于100;3、 三角形中的数字为0,1,…,99;测试数据通过键盘逐行输入输入样例573 88 1 02 7 4 44 5 2 6 5输出30分析本题利用递归的思想,当从顶层沿某条路...原创 2020-04-15 09:02:11 · 4953 阅读 · 2 评论 -
【算法】放苹果
描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。输出对输入的每组数据M和N,用一行输出相应的K。设f(m,n)为m个苹果,n个盘子的放法数目,则先对n作...原创 2020-02-28 23:20:54 · 267 阅读 · 1 评论 -
【算法】递归算法
基本认识1、程序直接或间接调用自身的编程技巧称为递归算法(Recursion)2、直接或间接调用自身的函数称为递归函数3、它通常把一个 大型复杂的问题 , 层层转化为一个与原问题相似的 规模较小的问题来求解。基本思想问题层层分解把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题。方法递归的关键在于找出递归定义和递归终止条件递归定义使问题向...原创 2020-02-26 23:36:46 · 966 阅读 · 0 评论