随笔分类 - 高效算法
CodeForces 671B Robin Hood (二分)
摘要:题意:n个人,每个人ci的金币,每天最富有的人都会给最贫穷的人1金币,问k天后最富有人和最贫穷的人差了多少金币。 析:首先先这样想,如果每个穷人每天获得一个金币,那么k天后,最穷的人的金币为x,同理,每个富人每天丢一枚金币,那么k天后最富的人金币为y, 那么如果 x < y那么y-x就是答案,否则就
阅读全文
CodeForces 524C The Art of Dealing with ATM (二分)
摘要:题意:给定 n 种不同的钞票,然后用q个询问,问你用最多k张,最多两种不同的钞票能不能组成一个值。 析:首先如果要求的值小点,就可以用DP,但是太大了,所以我们考虑一共最多有n * k种钞票,如果每次都挨着遍历,时间肯定受不了, 所以我们可以枚举其中一种,然后再用二分查找快速查找另一种,然后不断更新
阅读全文
UVa 1412 Fund Management (预处理+状压DP)
摘要:题意:题意很难说清楚自己看原文,链接:UVa 1412 Fund Management 析:总体来说如果没有超时的话,这个题不是特别难,但是这个题很容易超时,主要是体现在状态转移时,很容易想到状态方程表示方法, dp[i][s]表示第 i 天时状态为s时能获得的最大值,转移方程也很容易,三种决策,要
阅读全文
POJ 3662 Telephone Lines (二分+dijkstra)
摘要:题意: 多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。 该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线。 其他的由于地震使
阅读全文
UVa 12105 Bigger is Better (DP)
摘要:题意:用不超过 n 根火柴,组成一个尽可能大的数。 析:很明显的一个DP题,首先不难想到这个dp[i][j] 表示前 i 根火柴,所能拼出的取模 m 为 j 的数,状态转移方程也很好写, dp[i][j] ==> dp[i+c[k]][(j*10+k)%m] 其中 k 为在后面添加的数,c 数组是用
阅读全文
UVaLive 3635 Pie (二分)
摘要:题意:有f+1个人来分n个圆形派,每个人得到的必须是一个整块,并且是面积一样,问你面积是多少。 析:二分这个面积即可,小了就多余了,多了就不够分,很简单就能判断。 代码如下:
阅读全文
UVaLive 3971 Assemble (水题二分+贪心)
摘要:题意:你有b元钱,有n个配件,每个配件有各类,品质因子,价格,要每种买一个,让最差的品质因子尽量大。 析:很简单的一个二分题,二分品质因子即可,每次计算要花的钱的多少,每次尽量买便宜且大的品质因子。 代码如下:
阅读全文
UVa 10795 A Different Task (递归)
摘要:题意:汉诺塔,给定一个初始局面,和一个目标局面,问你最少走多少步。 析:首先考虑最大的盘子,如果最大的盘子已经在相应的柱子上,那么就不用移动了,所以首先先找到要移动的最大盘子k,然后再移动最大的盘子,假设要把它从1移动到2, 那么我们先把1-k-1,移动到3号柱子上,这个局面称为参考局面,那么我们可
阅读全文
POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)
摘要:题意:给n个数(n<=200000),每个数的绝对值不超过(10^6),有m个查询(m<=200000),每次查询区间[a,b]中连续的没有相同数的的最大长度。 析:由于n太大,无法暴力,也承受不了O(n*n)的复杂度,只能是O(nlogn),首先是用f[i] 表示每个数 i 为左端点,向右可以最多
阅读全文
CodeForces 754D Fedor and coupons (优先队列)
摘要:题意:给定n个优惠券,每张都有一定的优惠区间,然后要选k张,保证k张共同的优惠区间最大。 析:先把所有的优惠券按左端点排序,然后维护一个容量为k的优先队列,每次更新优先队列中的最小值,和当前的右端点, 之间的距离。优先队列只要存储右端点就好。 代码如下:
阅读全文
HDU 1052 Tian Ji -- The Horse Racing (贪心)
摘要:题意:田忌赛马,问你田忌最多能赢多少银子。 析:贪心,绝对贪心的题,贪心策略是: 1.如果田忌当前的最快的马能追上齐王的,那么就直接赢一局 2.如果田忌当前的最慢的马能追上齐王的,那么就直接赢一局 3.如果田忌当前的最慢的马不能超过齐王的,那么就输一局,并把齐王最快的干掉 通过以上策略,就是田忌赢的
阅读全文
CodeForces 732D Exams (二分)
摘要:题意:某人要考试,有n天考m个科目,然后有m个科目要考试的时间和要复习多少天才能做,问你他最早考完所有科目是什么时间。 析:二分答案,然后在判断时,直接就是倒着判,很明显后出来的优先,也就是一个栈。 代码如下:
阅读全文
CodeForces 732B Cormen — The Best Friend Of a Man (贪心)
摘要:题意:给定n和k表示,狗要在任意连续两天散步次数要至少为k,然后就是n个数,表示每天的时间,让你增加最少次数使得这个条件成立。 析:贪心,策略是从开始到最后暴力,每次和前面一个相比,如果相加不够k,那么就给当前加上差。 代码如下:
阅读全文
HDU 5510 Bazinga (KMP)
摘要:题意:给定 n 个 字符串,让你找出最大的 r,使得存在一个 sl 不是sr的子串(l < r)。 析:KMP算法,不过直接暴力就别想了,肯定TLE,所以我们考虑一下,用两个指针 l, r,如果sl 不是 sr的字串,那么们就可以更新r,继续往后,直到找到最后。 代码如下:
阅读全文
5950 Recursive sequence (矩阵快速幂)
摘要:题意:递推公式 Fn = Fn-1 + 2 * Fn-2 + n*n,让求 Fn; 析:很明显的矩阵快速幂,因为这个很像Fibonacci数列,所以我们考虑是矩阵,然后我们进行推公式,因为这样我们是无法进行运算的。好像有的思路,最后也没想出来,还是参考的大牛的博客 http://blog.csdn.
阅读全文
HDU 5945 Fxx and game (DP+单调队列)
摘要:题意:给定一个 x, k, t,你有两种操作,一种是 x - i (0 <= i <= t),另一种是 x / k (x % k == 0)。问你把x变成1需要的最少操作。 析:这肯定是DP,也想到可能是单调队列,但是不会啊。。。。就是胡搞了一发,虽然AC了,但是效率极低,比用单调队列少10倍。 d
阅读全文
HDU 4893 Wow! Such Sequence! (树状数组)
摘要:题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数, 并且是最小的那个。 析:觉得应该是线段树的,但是。。。不会啊。。。就想胡搞一下。 所以用了树状数组,也就是和的,然后用一个
阅读全文
UVa 1471 Defense Lines (二分+set优化)
摘要:题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长。 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] 表示以 i 开头的连续最长序列,然后再去找最长的, 枚举 i,然后用set来维护一个单调上升的序列
阅读全文
Gym 100531B Buffcraft (贪心+暴力+前缀和)
摘要:题意:给定两个加血的方式,一个是直接加多少,另一种是加百分之几,然后你能够你选 k 种,问你选哪 k 种。 析:首先肯定要选加的多的,所以我们先排序,从大到小,然后用前缀和存储一下,再去枚举从第一种和从第二种选 i 个,从另一个中选 k-i的, 注意这个 k 可能大于 m+n,讨论一下。 代码如下:
阅读全文
POJ 2452 Sticks Problem (暴力或者rmq+二分)
摘要:题意:给你一组数a[n],求满足a[i] < a[k] < a[j] (i <= k <= j)的最大的 j - i 。 析:在比赛时,我是暴力做的,虽然错了好多次,后来说理解是rmq,我又用rmq写了一次,发现rmq还没有我暴力快,rwq 2000多,暴力才700. 暴力中加了一个优化条件就是前枚
阅读全文
浙公网安备 33010602011771号