算法
yanyanwenmeng
这个作者很懒,什么都没留下…
展开
-
二分查找和multiset用法
二分查找,multiset原创 2016-11-13 20:20:34 · 1058 阅读 · 0 评论 -
归并排序(分治)
归并排序 分治原创 2017-08-21 18:17:25 · 386 阅读 · 0 评论 -
四则运算(递归)
/*1. 表达式由一个或多个项组成;(+ and -)2. 一个项由一个或多个因子组成;(* and /) 3. 一个因子由一个或多个表达式或者一个整数组成。( ( and ) ) (2+3)*(5+7)+9/3*/ #include#include#includeusing namespace std;int factor_value();//读入一个因子,并返回其值in原创 2017-08-20 22:04:02 · 1182 阅读 · 0 评论 -
合并石子(动态规划经典题)
步骤:1. 设状态:f[i][j]表示从第i堆合并到第j堆,合并成一堆的最小得分2. 初始状态:f[i][i]=0; 最终状态:f[1][n];//从第1堆合并到第n堆的最小得分3.状态转移方程:f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);//s[i]表示前i堆石头数量总和/*71378162141原创 2017-08-03 00:19:46 · 2476 阅读 · 1 评论 -
01背包问题
【例9.11】01背包问题时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。【输入】第一行:两个整数,M(背包容量,M第2..N+1行:每行二个整数Wi,Ci,表示原创 2017-09-14 01:09:29 · 2584 阅读 · 0 评论 -
数字金字塔(动态规划)
观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。原创 2017-09-14 21:19:02 · 12460 阅读 · 0 评论 -
多阶段决策过程的最优化问题(动态规划)
最短路径问题。下图给出了一个地图,地图中的每个顶点代表一个城市,两个城市间的一条连线代表道路,连线上的数值代表道路的长度。现在想从城市A到达城市E,怎样走路程最短?最短路程的长度是多少?原创 2017-09-14 19:58:55 · 14520 阅读 · 0 评论 -
拦截导弹问题(贪心算法)
【例6.4】拦截导弹问题(Noip1999)时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有原创 2017-09-17 23:44:12 · 12653 阅读 · 3 评论 -
拦截导弹(贪心+动态)
【例9.4】拦截导弹(Noip1999)时间限制: 1000 ms 内存限制: 65536 KB【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的...原创 2017-09-18 00:18:10 · 1542 阅读 · 0 评论 -
城市交通网(动态规划,最短路径,输出最短路径)
【例9.5】城市交通路网时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由A->E。试用动态规划的最优化原理求出A->E的最省费用。如图:求v1到v10的最短路径长度及最短路径。【输入】第一行为城市的数量N;后面是N*N的表示两个城市间费用组成的矩阵。【输原创 2017-09-18 18:31:13 · 7325 阅读 · 2 评论 -
求最长不下降序列并输出序列(动态规划)
【例9.3】求最长不下降序列时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】设有由n(1b(j)(i例如13,7,9,16,38,24,37,18,44,19,21,22,63,15。例中13,16,18,19,21,22,63就是一个长度为7的不下降序列,同时也有7 ,9,16,18,19,21,22,63组成的长度为8的不下降序原创 2017-09-18 20:48:46 · 2394 阅读 · 0 评论 -
挖地雷(动态规划 输出路径)
【例9.6】挖地雷时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】在一个地图上有n个地窖(n【输入】第一行:地窖的个数;第二行为依次每个地窖地雷的个数;下面若干行:xi yi //表示从xi可到yi,xi最后一行为"0 0"表示结束。【输出】k1-k2-…-kv //挖地雷的顺序挖到最多原创 2017-09-20 14:57:16 · 1737 阅读 · 1 评论 -
友好城市(动态规划,排序)
【例9.7】友好城市时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交原创 2017-09-20 15:47:46 · 1405 阅读 · 0 评论 -
连续子段和问题(动态规划)
【问题描述】给出一段序列,选出其中连续且非空的一段使得这段和最大。【输入格式】输入文件的第一行是一个正整数 N,表示了序列的长度。第 2 行包含 N 个绝对值不大于 10000 的整数 A[i],描述了这段序列。【输出格式】输入文件仅包括 1 个正整数,为最大的子段和是多少。【样例输入】72 -4 3 -1 2 -4 3【样例输出】4原创 2017-09-20 21:09:00 · 1908 阅读 · 0 评论 -
合唱队形(动态规划)
【例9.8】合唱队形时间限制: 1000 ms 内存限制: 65536 KB【题目描述】N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti...原创 2017-09-21 21:02:22 · 2855 阅读 · 0 评论 -
最长公共子序列(动态规划)
【例9.9】最长公共子序列时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=,则另一序列Z=是X的子序列是指存在一个严格递增的下标序列,使得对于所有j=1,2,…,k有: Xij=Zj例如,序列Z=是序列X=的子序列,相应的递增下标序列为。给定两个原创 2017-09-21 23:00:29 · 851 阅读 · 0 评论 -
讨厌的青蛙(枚举)
图片来源:点击打开链接问题讲解: 解题思路:任意确定两点,作为青蛙跳的前两点,然后判断这两点是否合理:1. 第一点的前一点还在稻田中,说明步长不合理,重新选第二点;2. x方向越界,重新选择第一点。(因为x是从小到大排序,第二点不管怎么选步长只会越来越大,所以需要重新选择第一点。)3. y方向越界,重新选择第二点。原创 2017-08-18 19:52:14 · 880 阅读 · 0 评论 -
假币问题(枚举)
2692:假币问题描述赛利有12枚银币。其中有11枚真币和1枚假币。假币看起来和真币没有区别,但是重量不同。但赛利不知道假币比真币轻还是重。于是他向朋友借了一架天平。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称原创 2017-08-21 10:42:11 · 2520 阅读 · 0 评论 -
爬楼梯(递归)
4017:爬楼梯描述树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 输出不同的走法数,每一行输入对应一行输出样例输入5810样例输原创 2017-08-21 00:13:48 · 2050 阅读 · 0 评论 -
方格取数(动态规划经典题)
1. 设状态:f[i][j][h][k];//表示两条路同时走,第一条路径走到(i,j)时,第二条走到(h,k)时的最大数字和;2. 初始状态:f[0][0][0][0]=0; 最终状态:f[n][n][n][n];3. 状态转移方程:当i==h&&j==k时,f[i][j][h][k]=max{f[i-1][j][h-1][k],f[i][j-1][h][k-1],f[i-1]原创 2017-08-10 21:19:21 · 6352 阅读 · 3 评论 -
编辑距离和最长公共子序列(动态规划经典题)
编辑距离:1. 设状态:f[i][j]表示s1串的前i个字符和s2串的前j和字符相等时A串最少字符操作次数;2. 初始状态:f[i][0]=i;//当s2串没有字符时,最少操作次数为将s1串的所有字符删除; f[0][i]=i;//当s1串没有字符时,最少操作次数为在s1串插入s2串对应位置一样的字符;3. 最终状态:当s1[i-1]=原创 2017-08-10 11:01:50 · 1434 阅读 · 0 评论 -
乘积最大(动态规划经典题)
1. 设状态:f[i][k];//在数字串的前i位里面插入k个乘号的最大乘积2. 初始状态:f[i][0]=a[1][i];//不插入乘号时的结果等于a[1][i];a[j][i]表示从第j位到第i位组成的自然数 最终状态:f[n][k1];3. 状态转移方程:f[i][k]=max(f[i][k],f[j][k-1]*a[j+1][i]);//j表示最后一个乘号的插入位置原创 2017-08-03 01:25:18 · 1424 阅读 · 0 评论 -
复制书稿(动态规划经典题)
Problem Description现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三和第四本书给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。Input输入有多组数据,每组数据第1行两个整数m,k(k第2行m个整数,第原创 2017-08-16 15:56:16 · 4583 阅读 · 0 评论 -
棋盘分割(递归,动态规划)
193:棋盘分割总时间限制: 1000ms 内存限制: 65536kB描述将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋原创 2017-08-19 12:11:55 · 2298 阅读 · 2 评论 -
汉诺塔问题(递归)
6261:汉诺塔问题描述约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:1...原创 2017-08-19 22:25:27 · 834 阅读 · 0 评论 -
小游戏(搜索)
一天早上,你起床的时候想:“我编程序这么牛,为什么不能靠这个赚点小钱呢?”因此你决定编写一个小游戏。游戏在一个分割成w * h个正方格子的矩形板上进行。如图所示,每个正方格子上可以有一张游戏卡片,当然也可以没有。当下面的情况满足时,我们认为两个游戏卡片之间有一条路径相连:原创 2017-08-18 19:22:12 · 931 阅读 · 0 评论 -
熄灯问题
有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。原创 2017-08-15 22:14:21 · 784 阅读 · 0 评论 -
最长不下降子序列
/*开辟一个堆栈数组stack[],每次取栈顶元素top和读到的元素temp做比较,如果temp>top则将temp入栈,如果temp<=top则二分查找栈中的比temp大的第一个元素,并用temp替换他,最后max即为栈的大小 */ #include #include #define SIZE 1001using namespace std; int main(){ i原创 2017-05-16 16:58:10 · 222 阅读 · 0 评论 -
汉诺塔问题(用栈替代递归)
汉诺塔问题原创 2017-08-20 13:19:48 · 1131 阅读 · 0 评论 -
逆波兰表达式(递归)
1696:逆波兰表达式总时间限制: 1000ms 内存限制: 65536kB描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。原创 2017-08-20 15:08:11 · 1126 阅读 · 1 评论 -
简单算术表达式求值
简单算术表达式求值总时间限制: 1000ms 内存限制: 65536kB描述两位正整数的简单算术运算(只考虑整数运算),算术运算为:+,加法运算;-,减法运算;*,乘法运算;/,整除运算;%,取余运算。算术表达式的格式为(运算符前后可能有空格):运算数 运算符 运算数请输出相应的结果。输入一行算术表达式。原创 2017-08-20 20:20:04 · 7455 阅读 · 0 评论 -
计算分数加减表达式的值
33:计算分数加减表达式的值描述编写程序,输入n的值,求 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 + ... + (-1)n-1·1/n 的值。输入输入一个正整数n。1 输出输出一个实数,为表达式的值,保留到小数点后四位。样例输入2样例输出0.5000查看 提交原创 2017-08-20 20:50:27 · 1754 阅读 · 0 评论 -
计算表达式的值
描述有些语言中表达式的运算符使用字符串表示,例如用mul代表*,用div代表/,用add代表+,用sub代表-,用mod代表%。输入第一行为表达式的个数n。其余n行每行一个表达式,表达式由两个整数及其中间的运算符字符串表示。输出输出为n行,每行是对应表达式的值。注意,此处要求的所有运算均为整数运算。样例输入5345 mul 1223945 div 12321 ad原创 2017-08-20 21:15:51 · 3062 阅读 · 0 评论 -
放苹果(递归)
1664:放苹果总时间限制: 1000ms 内存限制: 65536kB描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8来源lwx@PO原创 2017-08-21 01:22:19 · 729 阅读 · 1 评论 -
最长公共子串(动态规划)
描述:计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符不区分大小写。输入:输入两个字符串输出:输出一个整数样例输入:asdfas werasdfaswer样例输出:6参考网址:http://blog.csdn.net/u013074465/article/details/45原创 2017-09-21 23:29:31 · 418 阅读 · 0 评论
分享