![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计
LFuser.
这个作者很懒,什么都没留下…
展开
-
数据结构——回文序列题解(栈)
数据结构——回文序列题解(栈)//回文序列 (栈) MOOC题解#include<stdio.h>#include<string.h>#include<stdlib.h>#define OK 1#define FALSE 0typedef struct LStack //链栈{ char a; struct L...原创 2018-10-14 13:20:58 · 3096 阅读 · 4 评论 -
数据结构——马踏棋盘题解(贪心算法)(C语言)
数据结构——马踏棋盘题解(贪心算法)使用循环建立棋盘与权值棋盘将当前步数写入棋盘数组中开始探测下一步该走的位置, 分别测试八个方向对可走位置进行查询权值,将权值最少的作为下一步的位置(每次都将步数最少的可走位置作为下一步的位置即贪心的体现)循环2~4。//马踏棋盘---贪心题解#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;原创 2018-10-15 16:08:32 · 10201 阅读 · 5 评论 -
最佳调度问题(C语言)--回溯法
N后问题转载于: https://blog.csdn.net/qq_35524157/article/details/79048737 的JAVA版本题目描述有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为Ti。找出完成这n个任务的最佳调度,使得完成全部任务的时间最少。用文件导入每个任务所需要的时间Ti解题思路回溯法是从初始状态出发,在隐式图中以深度优先的方式搜索问题的...转载 2019-06-23 20:00:04 · 4304 阅读 · 0 评论 -
最优分解问题(C语言)--贪心策略
最优分解问题题目描述设n是一个正整数,现在要求将n分解为若干个互不相同的自然数的和,使这些自然数的乘积最大。解题思路根据数学中和定近积大,积定近和小的原则,可得1、若a+b等于一个常数,则|a-b|越小,a*b就越大。要使得加数互不相同,又尽可能集中,那加数只能是连续的自然数了。2、一个数能分解,分解后乘积会比之前更大。具体代码实现#include <stdio.h>...原创 2019-06-23 19:08:41 · 4453 阅读 · 0 评论 -
整数变换问题(C语言)--回溯法
整数变换问题题目描述关于整数i的变换f和g定义如下:f(i)=3i;g(i)=i/2。现要求对于给定的2个整数n和m,用最少的f和g变换次数将n变换为m。具体代码实现#include<stdio.h>#define MAX 100 #define MAXVALUE 32767int m,n;int a[MAX]={0}; //记录变换数组 int b[MAX]; ...原创 2019-06-19 20:44:22 · 2259 阅读 · 3 评论 -
子集和问题(C语言)--回溯法
子集和问题题目描述给定一个正整数集合X={x1,x2,…,xn}和一个正整数c,设计回溯算法,求集合X的一个子集Y,使得Y中元素之和等于c。解题思路类似于全排列的思想,尝试所有结果,如果不符合则回溯具体代码实现#include <stdio.h>#include <stdlib.h>int flag=0,sum=0;int *s, *x, n,c; ...原创 2019-06-19 20:40:15 · 8783 阅读 · 2 评论 -
N皇后排序树(C语言)--回溯法
N后问题题目描述在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上解题思路由于N个皇后的任意两个不能处在同一行,那么肯定是每个皇后占据一行,于是我们定义一个数组,长度为N。数组的第i个数字代表位于第i行的皇后的列号。先把数组中的N个数字用(1–>N)初始化,然后对该数组中的数字作全排列。 因为我们是用不同的数字初始化数组,故而所有皇后肯定不同列。 因此...原创 2019-06-19 20:33:49 · 1644 阅读 · 1 评论 -
删数问题(C语言)--贪心策略
删数问题题目描述在给定的n个数字的数子串,删除其中k(k<n)个数字后,剩下的数字按照原次序组成一个新的正整数。使得剩下的数字组成的新正整数最小。解题思路贪心思想,每次从左到右,删除第一个大于后者的元素,如果没有,说明是已经降序排列,就从后面依次删除。具体代码实现#include<stdio.h>#include<stdlib.h>#include&l...原创 2019-05-09 17:45:29 · 2018 阅读 · 0 评论 -
会场安排问题(C语言)--贪心策略
会场安排问题题目描述假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排解题思路1.对活动进行排序,开始时间越早排在越前面,如果两个活动时间相同,则结束时间越早的排在越前面2.始时间最早和持续时间最短的优先安排会场,并记录会场号,3.其余活动的开始时间大于或等于已安排活动的结束时间的安排在同一会场,4.若某活动的开始时间小于已经安排了会场的活...原创 2019-05-09 17:42:37 · 11249 阅读 · 8 评论 -
多处最优服务次序问题(C语言)--贪心策略
多处最优服务次序问题题目描述设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,1≤i≤n,共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。解题思路假设原问题为T(先假设只有一个服务点),而我们已经知道了某个最优服务系列,即最优解为A={t(1),t(2),….t(n)}(其中t(i)为第i个用户需要...原创 2019-05-09 17:37:59 · 9677 阅读 · 1 评论 -
01背包问题(C语言)--动态规划
01背包问题题目描述一个旅行者有一个最多能装m公斤的背包,现在有n中物品,每件的重量分别是W1、W2、……、Wn,每件物品的价值分别为C1、C2、……、Cn, 需要将物品放入背包中,要怎么样放才能保证背包中物品的总价值最大?解题思路动态规划方程 V(i,0)=V(0,j)=0 V(i,j)=V(i-1,j) j<wi 装不下的时候 V(i,j...原创 2019-05-09 17:32:13 · 26037 阅读 · 9 评论 -
编辑距离问题(C语言)--动态规划
编辑距离问题题目描述设A 和B 是2 个字符串。要用最少的字符操作将字符串A转换为字符串B。字符操作包括:(1) 删除一个字符;(2) 插入一个字符;(3) 将一个字符改为另一个字符也就是说将字符串A 变换为字符串B 所用的最少字符操作数称为字符串A 到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2个字符串A 和B,计算出它们的编辑距离d(A,B)解题思路m[...原创 2019-05-09 17:27:32 · 3654 阅读 · 2 评论 -
最小m子段和问题(C语言)--动态规划
最小m子段和问题题目描述给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列。 如何分割才能使这m段子序列的和的最大值达到最小?解题思路用dp[i][j]存储长度为i,分j段后其子序列和的最大值的最小值,那么它由两部分构成:当j=1时,dp[i][1]表示的是长为i的整个序列的和;当j>1时,dp[i][j] = MIN(for(k=1; k<...原创 2019-05-09 17:22:26 · 3936 阅读 · 0 评论 -
最长单调子序列(C语言)--动态规划
最长单调子序列题目描述给出一个由n个数组成的序列x[1…n],找出它的最长单调上升子序列。即求最大的m和a1,a2……,am,使得a1<a2<……<am且x[a1]<x[a2]<……<x[am]解题思路动态规划的状态表示描述为:m[i],1≤i≤n,表示以x[i]结尾的最长上升子序列的长度,则问题的解为 max{m[i],1≤i≤n }假设当前已求...原创 2019-05-09 17:18:20 · 3172 阅读 · 1 评论 -
自然分组的归并排序(C语言)--递归与分治
自然分组的归并排序解题思路遍历把一个无序的集合,把局部有序的元素划分为一组,两两进行合并,一次合并完毕,再次进行自然分组,然后再两两合并,直到最后一次合并后只剩下一个分组,至此,这个无序的集合就成为有序的集合。具体代码实现#include <stdio.h>#include<stdlib.h>int N; int NaturalGrouping(int ...原创 2019-05-09 17:12:23 · 1069 阅读 · 0 评论 -
全排列算法(C语言)--递归与分治
全排列算法题目描述对于一个给定的序列 a = [a1, a2, a3, … , an],请设计一个算法,用于输出这个序列的全部排列方式。解题思路1.当N=1时,打印a[0],的全排列2.当N=2时,第一步:把a[0]放在首位,打印a[1]=的全排列第二步:把a[1]放在a[0]的位置(这时候需要交换原数组的a[0]和a[1]),然后打印a[0],a[2]的全排列,打印完后再换回原来的...原创 2019-05-09 17:08:05 · 3565 阅读 · 1 评论