
初学算法
文章平均质量分 70
算法学习
会灰的飞猫
这个作者很懒,什么都没留下…
展开
-
复杂整数划分问题(动态规划)
本文认为整数划分问题的关键在于dp[i][j]的理解上,透彻理解它的含义,能帮助我们轻松的解决问题。(1)将数字i分成j个整数;(2)数字i的划分中可能出现的最大数为j。一、题目简述描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。输入...原创 2020-03-30 23:59:13 · 2785 阅读 · 0 评论 -
最佳加法表达式(动态规划)
采用动态规划解决最佳加法表达式比较容易,难点在于高精度计算,本文前部分给出了解决该问题的基本方法,转载了高精度方法。一、题目描述描述给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值。例如,在1234中摆放1个加号,最好的摆法就是12+34,和为36输入有不超过15组数据每组数据两行。第一行是整数m,表示有m个加号要...原创 2020-03-28 19:40:14 · 2591 阅读 · 5 评论 -
Zipper动态规划
判断S1、S2能否混合组成S3,可以先判断S3的子串能否由前两者的子串组合而成,最基本的形式是,S3的第一个字符是否等于S1或S2的第一个字符。一、题目简述题目大意是给定三个字符串,判断第三个字符串能否由前两个混合成,但是前两个字符串要保持各自的字符顺序。如下的三个字符串,C是能由A、B组合成的String A: catString B: treeString C: tcraete而...原创 2020-03-28 17:27:13 · 527 阅读 · 0 评论 -
拦截导弹(最长非递减子序列)——动态规划
拦截导弹问题本质上是求最长非递增子序列的问题,采用动态规划解题时,可以划分为k(k为序列长度)个子问题,每个子问题就是求以第i(0<=i<k)个值为终点的最长非递增子序列。一、题目描述某国开发出一种导弹拦截系统,该系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。现在,捕获到一系列导弹依次飞来的高度,计算这套系统最多能拦截多少导弹。拦...原创 2020-03-28 14:52:23 · 892 阅读 · 0 评论 -
求排列的逆序数与输出前k大的数(分治算法)
分治把一个任务分解成多个规模更小的任务,能显著改善解决问题的效率。归并排序与快速排序是其典型应用,变形问题有排列的逆序数与输出前k大的数。一、排列的逆序数1.问题简述考虑1,2,…,n的排列 i1,i2,…,in,如果其中存在j,k,满足 j < k 且 ij> ik, 那么就称(ij,ik)是这个排列的一个逆序。一个排列含有逆序的个数称为这个排列的逆序数。现给定1,2,…,...原创 2020-03-09 21:14:49 · 704 阅读 · 4 评论 -
二分算法之派与月度开销
分派与月度开销是两种经典的二分题型,前者是让最小值尽可能大,后者是使最大值尽可能小。在求解时,不妨先搭建出二分求解的框架(while循环,left=初值,right=初值,mid=left+(right-left)/2),在对当前mid进行判断是否合适,这时候需要设计一个函数 isAnswer(mid),该函数内部通常需要一个值cnt来计数(分得派的块数,划分的月数),再将该cnt与问题给定的某...原创 2020-03-04 14:42:54 · 1387 阅读 · 2 评论 -
好斗的牛(二分算法)
先使无序的xi值变为有序的,再采用二分法求解,别忘了排序。 描述一农夫有一牛棚,该棚有N个(2 <= N <= 100,000)槽。各槽沿同一直线的位置分别是x1,…xi,xN(0 <= xi <= 1,000,000,000)。 他又有C(2 <= C <= N)头母牛,在一起会互相攻击。为了防止这些母牛相互伤害,农夫希望让每两头奶牛间距离D越大越...原创 2020-03-01 17:13:29 · 1182 阅读 · 1 评论 -
简单整数划分与放苹果问题思考(递归)
这两个问题几乎是相同的,但是以放苹果的方式来思考问题明显会更易理解。下面先看一下两个问题的描述。整数划分描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。分苹果问题M个同样的苹果放N个同样的...原创 2020-02-29 00:13:35 · 626 阅读 · 1 评论 -
布尔表达式递归解法
&n...原创 2020-02-27 17:06:12 · 1663 阅读 · 1 评论 -
2的幂次方表示(递归)
2的幂次方表示(递归)一、问题描述任何一个正整数都可以用2的幂次方表示。同时约定方次用括号来表示,即ab可表示为a(b)。例如:137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)1315可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)输入一个正整数n(n≤20000)。输出一行,符合约定的n的0,2...原创 2020-02-26 17:38:52 · 3852 阅读 · 8 评论 -
全排列递归算法
&p;全排序递归算法–OpenJudgeOpenJudge里的题目,这里适当的利用STL里string的库函数sort()进行局部排序,使得求解更简洁。一、题目描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。...原创 2020-02-25 23:58:40 · 713 阅读 · 0 评论 -
初学枚举——特殊密码锁与熄灯问题的理解
一、特殊密码锁1. 问题简述有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按某个按钮时,跟它相邻的两个按钮状态也会反转。当按的是最左或者最右边的按钮时,该按钮只会影响到跟它相邻的一个按钮。当前密码锁状态已知,求解至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。输入:两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0...原创 2020-02-22 17:13:26 · 1020 阅读 · 2 评论 -
初学枚举——拨钟问题
一、描述有9个时钟,排成一个3*3的矩阵。现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。移动 影响的时钟1 ABDE2 ...原创 2020-02-23 17:33:07 · 3644 阅读 · 8 评论