算法设计与分析
文章平均质量分 82
想要成为咸鱼的我每天都在躺平
目标是早日退休
展开
-
【回溯法】0-1背包
0-1背包问题:给定的n种物品和一背包。物品i的重量是Wi,其价值是Vi,背包的容量为C。问应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?【解题思路】对于物品来说只有两种状态,放或者不放,即1或者0。求装入背包中物品的总价值最大,即,如果放入第i个物品后背包的总价值比不放入背包后的总价值大,则放入第i个物品,反之则不放。可以得到package( i , j ) =原创 2017-11-11 15:35:30 · 675 阅读 · 0 评论 -
蓝桥杯 历届试题 格子刷油漆
问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序。 c e f d a b 是另一种合适的方案。 当已知 N 时,求总的方案数。当N较大时,结果会迅速增...原创 2018-03-05 20:36:25 · 513 阅读 · 1 评论 -
蓝桥杯 历届试题 城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。 C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也可以在其中的一些地点建设码头,所有建了码头的地点可以通过河道连接。 栋栋拿到了允许建设的道路的...原创 2018-03-17 12:20:20 · 761 阅读 · 1 评论 -
蓝桥杯 历届试题 高僧斗法(尼姆博弈)
历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB问题描述 古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。 节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。最高一级台阶必须站人,其它任意。(如图1所示) 两位参加游戏的法师分别指挥某个小和尚向上走任意...原创 2018-03-01 21:00:31 · 833 阅读 · 0 评论 -
【算法笔记】贪心法 最小生成树(Prim算法&Kruskal算法)
在算法课的时候老师讲过最小生成树,生成树的原理挺简单来着,可是要用代码实现它还是有一定难度╭(╯^╰)╮,本人学渣,没有逼迫没有学习,所以知道这个算法一直没有实现,直到前几天一道蓝桥杯历届试题拦住了我,这个题网上查了查要两次kruskal,然后翻出了算法书⊙0⊙,emmmm……算了我还是先把最小生成树两个方法先过一遍吧最小生成树 性质:n个节点生成的最小生成树有n-1条边 & 最小生...原创 2018-03-15 18:38:04 · 10542 阅读 · 8 评论 -
【算法笔记】并查集(风险度量&通畅工程)
并查集这玩意上课老师没讲,听上去就很高大上,一看到题目说要用并查集,ψ(。。)什么!?并查集?什么玩意?算了算了,放弃这道题刷别的吧。今天研究了下并查集,发现还是挺简单的,博客上做个整理,以后忘了上来瞅瞅_(¦3」∠)_并查集并查集主要是用来检测两个点是否连通的,主要有两个功能,一个是find一个是join。至于什么时候用并查集,我想大概是你觉得需要判断这两个点是否连通吧,例如,几个个城市之间有几...原创 2018-03-14 21:00:46 · 530 阅读 · 1 评论 -
蓝桥杯 历届试题 九宫重排(bfs)
问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以...原创 2018-02-27 12:58:52 · 2070 阅读 · 3 评论 -
【NYOJ】NYOJ311完全背包
完全背包时间限制:3000 ms | 内存限制:65535 KB难度:4描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是c,价值是w。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。本题要求是背包恰好装满背包时,求出最大价值总和是多少。如果不能恰好装满背包,输出NO输入第一行: N 表示原创 2018-01-31 19:18:20 · 244 阅读 · 0 评论 -
【算法笔记】动态规划 线性DP
最长上升子序列(LIS)一个数列S如果分别是已知数列的单调上升子序列,且是所有符合此条件序列中最长的,则S称为已知序列的最长上升子序列,求S。拆分问题:求长度为n的数列的最长公共子序列可以转化成求其数列前n-1项的最长公共子序列,再判断是否要加第n项。状态转移方程:if (a[i] > a[j]) dp[i] = MAX (dp[i], dp[j] + 1);基础的最长公共子序列代码:#in...原创 2018-01-30 17:20:21 · 350 阅读 · 0 评论 -
购物券消费方案
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。程序输入:第一行是一个整数m,代表可购买的商品的种类数。接下来是m个整数,每个1行,分别代表这m种商品的单价(0程序输出: 第一行是一个整数,表示共有多少种方案 第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空原创 2017-11-14 20:14:27 · 742 阅读 · 0 评论 -
【动态规划】0-1背包
0-1背包问题:给定的n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?【分析】对于物品来说只有两种选择装入背包或者不装入背包即0-1,如何判断物品是否装入背包是0-1背包问题的核心。用数组total[i][j]表示处理第i个物品后背包容量还有j时的总价值可得到total[i][j] = Max(原创 2017-11-05 21:03:23 · 507 阅读 · 0 评论 -
背包问题(待补充)
0-1背包【动态规划】讲解#includevoid main(){ int capacity = 10; //容量 int w[6] = {0,2,2,6,5,4}; //重量 int v[6] = {0,6,3,5,4,6}; //价值 int p[6][11]; //背包 int i,j; //初始化为0 i=0; for(j=0;j<11;j++)原创 2017-11-11 16:22:53 · 249 阅读 · 0 评论 -
蓝桥杯 历届试题 剪邮票
【题目描述 - Problem Description】如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。【解题思路】 看到题目第一反应就是DFS,一个个的走过去,然后算出来的有120种正确答案是116...原创 2018-03-31 16:04:16 · 610 阅读 · 1 评论