算法
文章平均质量分 51
莫余
无论如何,都要去试一试,哪怕不能证明我可以!
展开
-
你想闭着眼睛也能写对【二分搜索】吗?点进来看看吧
二分搜索Knuth大佬曾对二分查找做出这样的评价: 思路很简单,细节是魔⿁。最常⽤的⼆分查找场景:寻找⼀个数、寻找左侧边界、寻 找右侧边界。二分查找框架结构int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left + (right - left) / 2; if (nums[mid] == target) { ... } else原创 2021-03-29 08:56:28 · 119 阅读 · 2 评论 -
拦截导弹问题(递归)
问题描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导...原创 2020-05-03 22:54:16 · 557 阅读 · 4 评论 -
动态规划的理解与设计方案
动态规划算法设计设计要素问题建模,优化的目标函数是什么?约束条件是什么?如何划分子问题(边界) ?问题的优化函数值与子问题的优化函数值存在着什么依赖关系?(递推方程)是否满足优化原则?最小子问题怎样界定?其优化函数值,即初值等于什么?矩阵链相乘问题:设A1,A2,……,An为矩阵序列,Ai为Pi-1 X Pi阶矩阵,i =1,2,…,n.试确定矩阵的乘法顺序,使得元素相乘的总...原创 2020-05-02 22:12:57 · 211 阅读 · 0 评论 -
木棒加工问题(贪心+动态规划)
问题描述现有n根木棒,已知它们的长度和重量,要用一部木工机一根一根地加工这些木棒。该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的。木工机需要的准备时间如下: (1)第一根木棒需要1分钟的准备时间。 (2)在加工完一根长为length,重为weight的木棒之后,接着加工一根长为length’(length’<=length),重为weight’(weight...原创 2020-05-02 13:29:38 · 2900 阅读 · 8 评论 -
输油管道问题(快排)
题目描述:某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n 口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n 口油井的位置,即它们的x 坐标(东西向)和y 坐标(南北向),应如何确定主管道的最优位置, 即使各油井到主管道之间的输油管道长度总和最小的位置?给定n 口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。输入:首行为油...原创 2020-05-02 13:02:06 · 636 阅读 · 1 评论 -
动态规划解决0-1背包问题
#include<bits/stdc++.h>#define CAP 1500#define NUM 50using namespace std;int w[NUM];int v[NUM];int p[NUM][CAP];void knapsack(int c,int n){ int jMax=min(w[n]-1,c); for(int j=0;j&l...原创 2020-05-01 22:44:28 · 188 阅读 · 0 评论 -
递归树
递归树的概念:递归树是迭代计算的模型.。递归树的生成过程与迭代过程一致。递归树上所有项恰好是迭代之后产生和式中的项。对递归树上的项求和就是迭代后方程的解.迭代在递归树中的表示:如果递归树上某结点标记为W(m) W(m) = W(m1)+...+W(mt)+f(m)+...+g(m), m1,..., mt< m其中W(m1)…W(mt)称为函数项.二层子树的...原创 2020-04-25 21:52:53 · 570 阅读 · 0 评论 -
N皇后问题
问题描述:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。解题思路:搜索空间是子集树。整个棋盘的第一列肯定都存在可能的,所以需要循环遍历。逐个判断位置是否合法。到达叶子结点后,方案加1。#include<bits/stdc++.h>#define NUM 20using namespace std;int n;...原创 2020-04-20 12:42:10 · 194 阅读 · 0 评论 -
背包问题(贪心)
贪心算法:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解。贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。//A是问题的输入集合即候选集合Greedy(A){ S={ }; //初始解集合为空集...原创 2020-03-30 21:07:57 · 263 阅读 · 0 评论 -
最大字段和(动态规划)
给定由n个整数(包含负整数)组成的序列a1,a2,…,an,求该序列子段和的最大值。当所有整数均为负值时定义其最大子段和为0。所求的最优值为:例如,当(a1,a2, ……a7,a8)=(1,-3, 7,8,-4,12, -10,6)时,最大子段和为:#include<iostream>#define MAX_LEN 1001using namespace std;i...原创 2020-03-23 20:39:23 · 1596 阅读 · 0 评论 -
最大子段和问题(分治)
使用分治法的基本特征:1.问题缩小到一定规模容易解决2.分解成的子问题是相同种类的子问题,即该问题具有最优子结构性质3.分解而成的小问题在解决之后要可以合并这个是能否分治的关键,解决子问题之后如果不能合并从而解决大问题的话,那就凉凉了,如果满足一,二,不满足三,即具有最优子结构的话,可以考虑贪心或者dp4.子问题是相互独立的,即子问题之间没有公共的子问题如果不满足第四条的话,也可以用分...原创 2020-03-13 22:37:50 · 954 阅读 · 2 评论 -
数字三角形
例题:数字三角形。如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。1、 一步可沿左斜线向下或右斜线向下走;2、 三角形行数小于等于100;3、 三角形中的数字为0,1,…,99;测试数据通过键盘逐行输入,如上例数据应以如下所示格式输入:73 88 1 02 7 4 44 5 2 6 5思路:如果顺序从第一行开...原创 2020-03-03 08:02:26 · 935 阅读 · 0 评论 -
最大公因数和最小公倍数
C++代码如下:#include<bits/stdc++.h>using namespace std;int yue(int m,int n){ int r; r=m%n; while(r!=0) { m=n; n=r; r=m%n; } return n;}int main()...原创 2020-03-02 19:13:07 · 134 阅读 · 0 评论 -
五行代码解决汉诺塔(Java、C++)
原题:汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?思路:(1)如果只有一个盘子,直接从 起始盘 移动到 终点盘...原创 2020-04-01 22:16:13 · 165 阅读 · 0 评论 -
怪物补刀(贪心)
Fight with MonstersThere are n monsters standing in a row numbered from 1 to n. The i-th monster has hi health points (hp). You have your attack power equal to a hp and your opponent has his attack p...原创 2020-03-02 19:13:36 · 393 阅读 · 0 评论