算法设计与分析
Willy__QI
这个作者很懒,什么都没留下…
展开
-
最大子段和
问题描述:给定n个整数(可能为负数)组成的序列a[1], a[2], a[3],…, a[n], 求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。思路分析:一、蛮力算法:该算法思想是枚举的思想,将...原创 2019-07-04 09:15:02 · 2936 阅读 · 0 评论 -
完美的服务(Perfect Service UVa 1218)
问题:有n(n<=10000)台机器形成树状结构,要求在其中一些机器上安装服务器,要求每台不是服务器的机器恰好和一台服务器计算机相邻。求服务器的最少数量。分析:d[u][0]:u是服务器,则每个子结点可以是服务器也可以不是。d[u][1]:u不是服务器,但u的父亲是服务器,则u的所有子结点都不是服务器。d[u][2]:u和u的父亲都不是服务器,则u恰好有一个儿子是服务器。状态...原创 2019-09-17 20:51:54 · 460 阅读 · 0 评论 -
硬币问题
题目:有n种硬币,面值分别为V1,V2,…Vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。1 <= n <= 100,0<= S<= 100,1 <= Vi<= S。分析:将每种面值看作一个点,表示“需要凑足的面值”,本题的初始状态为S,目标状态为0。最小值:用d(i) 表示从面...原创 2019-09-10 19:33:19 · 563 阅读 · 0 评论 -
UVa 11572 唯一的雪花(滑动窗口)
问题:输入一个长度为n的序列A,找到一个最长的连续子序列,使得该序列中没有重复的元素。分析:假设序列元素从0编号,所求子序列的左端索引为L,右端索引为R。首先,L和R从0开始。①判断A[R]是否在子序列中,如果不在子序列中,R增大;如果在子序列中,R无法增大。②求连续子序列最大长度。③L向右增大一,重复①②,直到R超出序列A的范围。set集保存A[L-R]中的元...原创 2019-09-08 10:50:51 · 167 阅读 · 0 评论 -
编辑距离
问题:给定两个字符串s1和s2,计算出将s1转换成s2所使用的最少操作次数。有如下三种操作:1、插入一个字符2、删除一个字符3、修改一个字符实例:输入s1 = '"horse" s2 = "ros"输出 :3解释:horse ->rorse(将h换成r)rorse ->rose(删除r)rose ->ros(删除e)...原创 2019-09-06 11:18:39 · 551 阅读 · 0 评论 -
UVa 1593 代码对齐
题意如下:输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行。代码展示:#include <iostream>#include <vector>#include <string.h>#include <sstream> using nam...原创 2019-09-05 14:56:50 · 243 阅读 · 0 评论 -
并行程序模拟
问题描述:给定n个程序,每种程序有五种操作,分别为 var = constant(赋值),print var (打印), lock, unlock,end。变量用小写字母表示,初始化为0,为程序所公有(一个程序里对某个变量修改可以会影响其他程序里的这个变量),常数小于100(也就是说最多两位数)。每个时刻都只能有一个程序处于运行状态,其他的都在等待,上述五种操作用时分别是t1, t2, t...原创 2019-08-24 12:53:32 · 468 阅读 · 0 评论 -
邮局选址问题
问题描述: 在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意两点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|来度量。邮局选址问题是,居民们希望在城市中选择建立邮局的最佳位置,使n个居民点到邮局的距离总和最小。算法...原创 2019-04-08 10:59:29 · 6785 阅读 · 1 评论 -
最长公共子序列
问题描述:一个给定序列的子序列是在该序列中删除若干元素后得到的序列。给定2个序列 X 和 Y,当另一序列 Z 既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。 最长公共子序列问题是,给定2个序列 X={x1,x2,…,xm}和 Y={y1,y2,…,yn},找出 X 和 Y 的最长公共子序列。算法思路:设X={x1,x2,…,xm}和 Y={y1,y2,…,yn...原创 2019-04-12 20:03:51 · 396 阅读 · 0 评论 -
汽车加油问题
问题描述:一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,在哪些加油站停靠加油,使沿途加油次数最少。对于给定的n(n <= 5000)和k(k <= 1000)个加油站位置,编程计算最少加油次数。test.txt7 71 2 3 4 5 1 6 6output.txt4算法思路:首先加油站之间的距离d必须小于汽车加满油行使...原创 2019-05-05 21:54:15 · 500 阅读 · 0 评论 -
最大团(回溯法)
问题描述:给定一个无向图G=(V,E)。若UÍV,且对任意的u,vÎU, 都有边(u,v)ÎE, 则称U是图G的一个完全子图。 G的完全子图U是一个团,当且仅当U不包含在G的更大的完全子图中。G的最大团是指包含顶点数最多的团。最大团问题是,对给定的无向图,找出最大团中顶点的个数。算法思路:首先最大团是一个空团(即不包含任何一个顶点的团),然后把每一个顶点依次加入团中。加入当前...原创 2019-07-03 09:28:56 · 4873 阅读 · 1 评论 -
布线问题(分支限界)
问题描述:印刷电路板将布线区域划分成n×m个方格。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线。为了避免线路相交,已布了线的方格做了封锁标记,其它线路不允穿过被封锁的方格。电路板布线问题,对给定的电路板,找出最短的布线路径。算法思路: 布线问题的解空间是一个排列树。采用队列式分支限界从起始位置start...原创 2019-07-03 09:43:20 · 4167 阅读 · 4 评论 -
01背包(DP、回溯、分支限界)
问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量c的背包,如何让背包里装入的物品具有最大的价值?思路分析:一、动态规划:1、把背包问题抽象化(X1,X2,…,Xn,其中 Xi 取0或1,表示第 i 个物品选或不选),Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积(重量); 2、建立模型,即求max(V1X1+V2X2+…+VnXn);3、约束条...原创 2019-07-04 09:05:08 · 1168 阅读 · 1 评论 -
子集生成
问题:给定一个集合,枚举所有可能的子集。一、增量生成思路:一次选出一个元素放到集合。void print_subset(int n, int *A, int cur){ for(int i = 0; i < cur; i++) printf("%d ",A[i]); printf("\n"); int s = cur ? A[cur - 1] : ...原创 2019-09-20 09:52:29 · 134 阅读 · 0 评论