![](https://img-blog.csdnimg.cn/20201227135457221.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
٩ 计算机算法设计 و
文章平均质量分 50
友利奈绪赛高
萌新待开发
该还的还是要还的,记住学无止尽,闲是不可能闲下来的。
展开
-
蚁群优化 ACO
基本思想模拟蚂蚁选择路线的能力。即:蚂蚁以信息素的强度为概率来决定路线选择。ACO 最早用来解决 TSP 问题基本计算公式蚁群算法原理假如蚁群中所有蚂蚁的数量为m,所有城市之间的信息素用矩阵pheromone表示,最短路径为bestLength,最佳路径为bestTour。每只蚂蚁都有自己的内存,内存中用一个禁忌表(Tabu)来存储该蚂蚁已经访问过的城市,表示其在以后的搜索中将不能访问这些城市;还有用另外一个允许访问的城市表(Allowed)来存储它还可以访问的城市;另外还.原创 2021-01-02 14:27:46 · 429 阅读 · 0 评论 -
遗传算法
遗传算法(GA)的来源:生物的进化:自然选择、适者生存生物的遗传和变异 生物的遗传和变异(GA) 缺点:无人的主动性 ;解决方法有以下三个:① 定向培育过程如下: 第一:一个种群,大量的生物个体; 第二:选择具有需要特性的若干个体; 第三:进行繁殖; 第四:重复第二,直到满意为止。② 随机算法 在解空...原创 2021-01-02 14:06:33 · 1249 阅读 · 1 评论 -
线性规划与网络流
一般的网络流举例:多物流网络:标准术语:定理:单纯形算法:原创 2021-01-02 01:05:53 · 578 阅读 · 0 评论 -
动态规划-- 不下降数字序列
题目描述在一个数字序列中,找到一个最长的非连续子序列,使得这个子序列是不下降(非递减)。现有序列A={1,2,3,-1,-2,7,9},则A的最长不下降子序列是{1,2,3,7,9}。如果有多个最长序列,只需选数字顺位靠后的序列从大到小输出。输入要求输入2行;第一行一个整数n,表示有n个整数的序列要输入,n<1000;第二行共有n个整数。输出要求输出最长的不下降子序列,只需选数字顺位靠后的序列从大到小输出。输入样...原创 2020-11-30 20:26:46 · 1267 阅读 · 0 评论 -
动态规划--切钢条
题目描述一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi。那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大。输入要求输入钢条的长度n。输出要求输出获得的最大收益。输入样例7输出样例18方法一问题思路:把长度为n的钢条看做n段长度为1的钢条,从钢条的最左端开始的相邻连接点开始,可以选择切割或者不切割,故总共的切割方案有2的n-1次方(这是在假设每一...原创 2020-11-30 16:21:04 · 497 阅读 · 0 评论 -
动态规划-- 减肥的小K2
时间限制 :2000/1000 MS(Java/Others)| 内存限制 :65536/32768 KB(Java/Others)Submits :2| Solved :1题目描述小K是个苦命的孩子,他的师傅为了多赚钱,以减肥为理由,让他去采药,并说不完成不能吃饭。野地里有许多不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。要求在规定的时间t里,采到的草药的总价值最大。输入要求第一行有2个整数T(1≤T≤1000)和M(1≤M≤100),一个空格隔开,T代表...原创 2020-11-30 12:32:40 · 672 阅读 · 1 评论 -
VRP--车辆路径问题 c++
【问题说明】 通过实际案例描述,根据配送点和业务需求量,进行最优路线的计算。由物流中心点出发,配送多个客户点后再回到起点,根据车辆数量,承载限制,不同车辆服务成本、运行里程限制等条件选择最优运输路径(总里程最短),使成本最小化,配送订单最大化,满载率最大化(如由一个配送中心向各个销售点配送货物,通过算法确定配送中心每辆车的配送方案,包括配送至哪个客户,配送量,下一个配送目的地)。 【测试数据和说明】 某物流中心有5台配送车辆,车辆的最大载重均为8T,一次配送的最大行驶距离都为50KM,需.原创 2020-11-25 13:29:24 · 6040 阅读 · 2 评论 -
搜索--再填格子
题目描述有一个由数字 0、1 组成的方阵中,存在一任意形状的封闭区域,封闭区域由数字1 包围构成,每个节点只能走上下左右 4 个方向。现要求只把【最大封闭区域】内的空间填写成2 。例如: 6×6 的方阵:60 1 0 0 0 01 0 1 1 1 10 1 1 0 0 11 1 0 0 0 11 0 0 0 0 11 1 1 1 1 1填写后如下:0 1 0 0 0 01 0 1 1 1 10 1 1 2 2 1..原创 2020-11-12 23:23:18 · 455 阅读 · 0 评论 -
搜索--N皇后 -- 回溯 -- DFS
题目描述N皇后的排列,每行一个不冲突;N<=13。输入要求一个数字N (6 <= N <= 13) 表示棋盘是N x N大小的。输出要求前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。解的输出顺序为从上到下从左到右,小的优先输出输入样例6输出样例2 4 6 1 3 53 6 2 5 1 44 1 5 2 6 34方法一:...原创 2020-11-12 21:47:16 · 232 阅读 · 0 评论 -
贪心--区间问题
题目描述给出n个区间的起点和终点,求最少使用其中多少个区间可以将所有区间所在的区域完全覆盖。(测试的数据确保这1点)。输入要求第1行一个整数n,表示n个区间;第2行开始n行,每行2个整数,表示一个区间范围。类似[1,4][5,6]被认为是覆盖了[1,6]。输出要求从起点开始,按区间先后顺序,输出选中的区间。所选的区间应尽可能向终点扩展。输入样例71 5 1 63 61 76 9 9 107 ...原创 2020-11-12 21:20:31 · 650 阅读 · 0 评论 -
贪心--减肥的小K
题目描述小K没事干,他要搬砖头,为了达到较好的减肥效果,教练规定的方式很特别:每一次,小K可以把两堆砖头合并到一起,消耗的体力等于两堆砖头的重量之和。经过n-1次合并后, 就只剩下一堆了。小K在搬砖头时总共消耗的体力等于每次合并所耗体力之和。小K为了偷懒,希望耗费的体力最小。例如有3堆砖头,数目依次为1、2、9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以总共耗费体力=...原创 2020-11-12 14:22:38 · 430 阅读 · 0 评论 -
回溯法--最优装载问题
有一批概共n个集装箱要装上两艘载重量分别为c1和c2的轮船,其中,集装箱i的重量为wi,且。装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这两艘轮船。Input输入的第一个为测试样例的个数T( T < 120 ),接下来有T个测试样例。每个测试样例的第一行是集装箱个数n( n <= 20 ),第二行是两个整数c1和c2,表示两艘轮船的载重量,接下来n行,每行一个整数wi,表示第i个集装箱的重量,( 0 ,i = 1, 2, …, n,0 < c1, c2 < 3原创 2020-11-06 12:40:51 · 1042 阅读 · 0 评论 -
分治--棋盘覆盖
题目描述在一个2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。输入要求输入一个整数k,k<=5;输入特殊格子的坐标x,y。输出要求输出一个由数值表示的二维矩阵。填充规则如下:(1)用数值填充方格;(2)特殊方格数值为0;...原创 2020-11-03 10:04:14 · 360 阅读 · 0 评论 -
分治--第k小的数
题目描述输入n个数,求其中第k小的数。输入要求第一行包含两个整数n和k;n<1000,1<=K<=n第二行包含n个整数。输出要求输出第k小的那个整数。输入样例15 11 3 7 2 4 6 -1 0 9 88 2 5 17 6 1输出样例-1提示可以通过此题学习分治法#include<iostream>#include <algorithm>#incl...原创 2020-11-03 10:02:58 · 1593 阅读 · 0 评论 -
递推--铺砖
有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?防止超出内存和编译时间#include<iostream>#include<vector>#include <string>using namespace std;int max(int x, int y) { if (x > y) { return x; } retu.原创 2020-11-03 00:01:03 · 764 阅读 · 0 评论 -
递推--街区
第一行首先输入街区的维数和障碍数,第二行开始输入障碍的坐标,人从左上角开始只能进行右移动或是向下移动,目的地为右下角。输出共有几种路线。# include<iostream>using namespace std;int dp[101][101]; // 保存走到每个街区的路数int main(){ int i; for (i = 0; i <= 100; i++) for (int j = 0; j <= 100; j++) dp[i..原创 2020-11-02 23:57:37 · 298 阅读 · 0 评论 -
递推--找数字
输入一行数字和一个k值,输出前k个小的数字#include<iostream> #include<cstring> using namespace std; int a[1000];int n = 0, k;void swap(int &a, int &b){ int temp = a; a = b; b = temp;}int partition(int l, int r){ int i = l, j = r + 1; .原创 2020-11-02 23:52:36 · 357 阅读 · 0 评论