算法设计
吹泡泡的海绵
这个作者很懒,什么都没留下…
展开
-
汽车加油问题 --贪心算法
问题描述 一辆汽车加满油后可行驶nkm 。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。编程任务 对于给定的n和k个加油站位置,编程计算最少加油次数。数据输入 第1行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途有k个加油站。接下来的一行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。...原创 2018-05-12 22:09:46 · 4367 阅读 · 3 评论 -
流水作业调度--动态规划
问题描述:n个作业{1,2,…,n},要在由机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。 要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。问题分析:直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。在一般情...原创 2018-05-12 22:04:48 · 1344 阅读 · 0 评论 -
0-1背包 (附解析样例)--动态规划
问题描述:给定n个物品和一个背包。物品i的重量为wi,价值为vi,背包容量为c。如何选择装入背包中的物品,使得装入背包的物品的价值最大?从第n个物品开始依次向前装,装的顺序为:(n, n-1, n-2, …, i+1, i, i-1, …, 1)函数、数组等声明: n 共有n个物品c 背包总重量为cv[i] 物品i价值为viw[i]物品i的重量为wix[i] x[i]=0,第i件物品不装入背...原创 2018-04-20 20:12:16 · 1182 阅读 · 0 评论 -
棋盘覆盖--分治
问题描述: 在一个2^k×2^k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k种,因而有4^k种不同的棋盘,图(a)所示是k=2时16种棋盘中的一个。棋盘覆盖问题(chess cover problem)要求用图(b)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖...原创 2018-04-13 23:18:53 · 316 阅读 · 0 评论 -
二分搜索 递归与非递归实现
在已排好序的a[n]中搜索x,返回x的下标,不存在返回-1递归实现:#include<iostream>using namespace std;int BinarySearch(int a[],int n,int x,int low,int high){ if(low<high) { int mid=(low+high)/2; i...原创 2018-04-08 18:35:48 · 366 阅读 · 0 评论 -
斐波那契数列
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2)输出第n项F(n)的值,n从0开始。代码实现:#include<iostream>using namespace std;int f(int n){ if(n=...原创 2018-04-08 18:30:18 · 157 阅读 · 0 评论 -
阶乘函数
输出n的阶层#include<iostream>using namespace std;long long f(long long n){ if(n==0) return 1; return n*f(n-1);}int main(){ long long n; cin>>n; long long sum=f...原创 2018-04-08 18:28:14 · 412 阅读 · 0 评论 -
0-1背包--回溯法(附数组法和构建类法)
0-1背包--回溯法本文附加两种方法,数组法和构建类法,两种方法解题思路原理相同。问题描述:给定n个物品和一个背包。物品i的重量为wi,价值为vi,背包容量为c。如何选择装入背包中的物品,使得装入背包的物品的价值最大?函数、数组声明:n物品的个数c背包的容量bestp最大价值i第i个物品cp当前包内物品价值cw当前包内物品重量w[i] 物品的重量v[i]物品的价值x[i]暂存物品的选中情况beat...原创 2018-05-21 20:00:40 · 400 阅读 · 0 评论