
算法设计与分析
童 话
这个作者很懒,什么都没留下…
展开
-
01背包问题(动态规划)
01背包问题描述:有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,每件物品数量只有一个,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?害,一遇到动态规划就gg解题思路及代码:/* 01背包问题 设f[i][j]表示把i件物品放入承重为j的背包中具有的最大的价值总和 weigh[i]表示第i...原创 2020-03-23 14:54:36 · 974 阅读 · 0 评论 -
东华oj-进阶题第45题-等差数列
45 等差数列作者: xxx时间限制: 1S章节: 一维数组问题描述 :一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…)在这个问题中a是一个非负的整数,b是正整数。写一个程序来找出在双平方数集合S中长度为n的等差数列。双平方数集合是所有能表示成p2+q2的数的集合。 输入说明 :第一行: N(3<= N<=25),要找的...原创 2020-03-07 15:19:53 · 831 阅读 · 0 评论 -
求最长不降子序列(动态规划)
/*求最长不下降子序列(动态规划)状态转移方程:length[i]=1+length[j],j为data[i]>data[j]的情况下能使length[j]取到最大的值初始情况length[1]=1; 且length[0]=0,这样求出来的length[j]才可以取到0*/#include<stdio.h>int data[15] = {-1, 13, 7, 9, ...原创 2020-03-04 20:48:38 · 441 阅读 · 0 评论 -
大数乘法C语言实现
引入今天在东华oj刷题的时候遇到了大数阶乘,需要用到大数乘法。说来大数乘法以前上算法课的时候学过,不过现在已经忘了……重新学了下,虽然原理看懂了,但是因为这里面细节太多,防不胜防(加上我比较菜),程序写出来之后调试了很久才得出正确答案。原理大数乘法的原理说白了就是利用了手动乘法的计算过程。我们手工做乘法的时候(假设A * B),从A的最后一位开始依次乘以B的每一位取余写下,有进位的时候记下...原创 2020-02-21 23:06:46 · 495 阅读 · 0 评论 -
八皇后问题
/* 八皇后问题:要在一个8*8的国际象棋几盘中放8个皇后, 使任意两个皇后都不能互相吃掉。规则是 皇后能吃掉偶同一行、同一列、统一对角 线的任意棋子,求所有的解 */ #include<iostream>#include<stdio.h>using namespace std;int a[21];int n = 16;bool...原创 2018-12-11 21:08:20 · 265 阅读 · 0 评论 -
利用图的深度优先搜索解决迷宫问题
总体思路是:从(1,1)出发,分四个方向深度优先搜索,将访问过的点的访问标志置为3,如果从当前点出发无法找到出口,则将该点的访问标志置为2。输出结果是如果标志为3的就输出L,其他标志的就输出2,这样就能很清楚的看到从入口到出口的路径了完整代码如下:/* 利用图的深度优先搜索解决迷宫问题 */#define N 10int maze[N][N] = {{0}, {0, 0, 0, 0,...原创 2018-12-07 15:37:26 · 3437 阅读 · 0 评论 -
利用图的广度优先遍历解决城市最短路径问题
首先说明,这里的最短路是指经过的城市最少代码如下:/* 广度优先遍历的应用:在城市地图中求一条 一个城市到另一个城市的经过最少城市的路径*/ #include<iostream>using namespace std;#define N 10int cityMap[N][N] = {{0}, {0, 0, 1, 1, 1, 0, 1, 0, 0} , {0,...原创 2018-12-05 17:32:04 · 1605 阅读 · 0 评论 -
利用隐式图的广度优先搜索算法解决迷宫问题
今天下午被一个迷宫问题搞懵了,想了许久才解决首先有必要说明隐式图:我们都知道一般的图具有明确的顶点和边,可以用邻接矩阵或者邻接表表示出来。但是实际应用中抽象出来的图往往根本没有顶点和边,这样的图就叫隐式图迷宫问题:用(1,1)代表迷宫入口,(4,4)代表迷宫出口,0代表有路可走,1代表墙壁,无法穿过,求入口到出口的一条路径。问题分析:可以将迷宫抽象成一个图,把找路径的过程看成图的广度优...原创 2018-12-05 17:25:44 · 855 阅读 · 0 评论 -
矩阵连乘问题
/* 矩阵连乘问题:求n个矩阵想乘至少需要进行多少次乘法 动态规划解决矩阵连乘问题 minMulTimes[i][j] = min{minMulTimes[i][k] + minMulTimes[k + 1][j] + columnNums[i - 1] * columnNums[k] * columnNums[j]} 这里i <= k < j */ ...原创 2018-12-02 21:54:31 · 326 阅读 · 0 评论 -
图的深度优先、广度优先遍历(简要实现)
/* 显式图的深度优先、广度优先遍历 */#include<iostream>using namespace std;#define N 10int edge[N][N] = {{0}, {0, 0, 1, 0, 1}, {0, 1, 0, 0, 0}, {0, 0, 0, 0, 1}, {0, 1, 0, 1, 0}};// 图 int vertexN...原创 2018-12-04 21:13:14 · 277 阅读 · 0 评论