随笔分类 - 思维
UVa 1335 Beijing Guards (二分+贪心)
摘要:题意:n 个人成一个圈,每个人想要 ri 种不同的礼物,要求相邻两个人没有相同的,求最少需要多少礼物。 析:如果 n 是偶数,那么答案一定是相邻两个人的礼物总种数之和的最大值,那么如果是奇数,就没那么好做了,我们可以二分答案, 在每次判定时,我们可以有这样的贪心策略,第一个人 1 - r1,在后面的
阅读全文
UVaLive 10859 Placing Lampposts (树形DP)
摘要:题意:给定一个无向无环图,要在一些顶点上放灯使得每条边都能被照亮,问灯的最少数,并且被两盏灯照亮边数尽量多。 析:其实就是一个森林,由于是独立的,所以我们可以单独来看每棵树,dp[i][0] 表示不在 i 点放灯,dp[i][1] 表示在 i 点放灯,很简单的一个DP 代码如下:
阅读全文
UVa 10755 Garbage Heap (暴力+前缀和)
摘要:题意:有个长方体由A*B*C组成,每个废料都有一个价值,要选一个子长方体,使得价值最大。 析:我们暴力枚举上下左右边界,然后用前缀和来快速得到另一个,然后就能得到长方体,每次维护一个最小值,然后差就是最大值。 代码如下:
阅读全文
UVaLive 3695 City Game (扫描线)
摘要:题意:给定m*n的矩阵,有的是空地有的是墙,找出一个面积最大的子矩阵。 析:如果暴力,一定会超时的。我们可以使用扫描线,up[i][j] 表示从(i, j)向上可以到达的最高高度,left[i][j]表示(i, j) 的左边界,right[i][j]右边界。 这三个可以用递推来实现。从向下扫描,每次
阅读全文
UVaLive 3905 Meteor (扫描线)
摘要:题意:给定上一个矩形照相机和 n 个流星,问你照相机最多能拍到多少个流星。 析:直接看,似乎很难解决,我们换一个思路,我们认为流星的轨迹就没有用的,我们可以记录每个流星每个流星在照相机中出现的时间段, 然后我们可以枚举时间段么?不行,这个是实数集上的,所以我们用扫描线,就相当于在x轴上有n个区间,我
阅读全文
CodeForces 496D Tennis Game (暴力枚举)
摘要:题意:进行若干场比赛,每次比赛两人对决,赢的人得到1分,输的人不得分,先得到t分的人获胜,开始下场比赛,某个人率先赢下s场比赛时, 游戏结束。现在给出n次对决的记录,问可能的s和t有多少种,并按s递增的方式输出。 析:如果枚举s 和 t,那么一定会超时的,所以我们考虑是不是可以不用全枚举。我们只要枚
阅读全文
POJ 1703 Find them, Catch them (并查集)
摘要:题意:一共有N个人,给出M个操作分为两种: 1、A a b :提问a和b是否是同一个帮派的。有三种答案:是,不是和不确定 2、D a b :a和b不是同一个帮派的。 析:加权并查集,用一个r[i]来表示 i 和其父亲的关系,如果为0,表示 i 和其父亲是同一帮,1表示不是,每次更新即可。 代码如下:
阅读全文
POJ 2184 Cow Exhibition (01背包)
摘要:题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,是的则求出总S与总F的和,注意S与F都不能为负数 析:用dp[i]来表示存放s[i]的时最大的f[i],其实就是一个01背包。只是取不取的关系。注意是有负数,所以把数组开大一点,然后s[i]的正负数, 我们取的顺序不同,正数是逆向,负数
阅读全文
CodeForces 748C Santa Claus and Robot (思维)
摘要:题意:给定一个机器人的行走路线,求最少的点能使得机器人可以走这样的路线。 析:每次行走,记录一个方向向量,每次只有是相反方向时,才会增加一个点,最后再加上最后一个点即可。 代码如下:
阅读全文
CodeForces 671B Robin Hood (二分)
摘要:题意:n个人,每个人ci的金币,每天最富有的人都会给最贫穷的人1金币,问k天后最富有人和最贫穷的人差了多少金币。 析:首先先这样想,如果每个穷人每天获得一个金币,那么k天后,最穷的人的金币为x,同理,每个富人每天丢一枚金币,那么k天后最富的人金币为y, 那么如果 x < y那么y-x就是答案,否则就
阅读全文
POJ 3658 Artificial Lake (单调栈)
摘要:题意: 析:利用单调栈,维护一个单调递增的栈,首先在最低的平台开始,每次向两边进行扩展,寻找两边最低的,然后不断更新宽度。 代码如下:
阅读全文
UVa 1412 Fund Management (预处理+状压DP)
摘要:题意:题意很难说清楚自己看原文,链接:UVa 1412 Fund Management 析:总体来说如果没有超时的话,这个题不是特别难,但是这个题很容易超时,主要是体现在状态转移时,很容易想到状态方程表示方法, dp[i][s]表示第 i 天时状态为s时能获得的最大值,转移方程也很容易,三种决策,要
阅读全文
HDU 3706 Second My Problem First (单调队列)
摘要:题意:求给定的一个序列中最长子序列,该子序列的最大值和最小值介于m和k之间。 析:用两个单调队列来维护一个最小值,一个最大值,然后每次更新即可。 代码如下;
阅读全文
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 数组是用
阅读全文
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的优先队列,每次更新优先队列中的最小值,和当前的右端点, 之间的距离。优先队列只要存储右端点就好。 代码如下:
阅读全文
CodeForces 753C Interactive Bulls and Cows (Hard)
摘要:题意:。。。 析:随机判断就即可,每次把不正确的删除,经过几次后就基本剩不下了。 代码如下:
阅读全文
HDU 1270 小希的数表 (暴力枚举+数学)
摘要:题意:... 析:我们可以知道,a1+a2=b1,那么我们可以枚举a1,那么a2就有了,并且a1+a3=b2,所以a3就有了,我们再从把里面的剩下的数两两相加,并从b数组中去掉, 那么剩下的最小的就是a4,然后依次可以求出a5,a6....由于a最大才是5000,并且保证有唯一解,那么找到一个就直接
阅读全文