poj
文章平均质量分 78
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
Dual Core CPU POJ - 3469 最小割(经典网络流)
传送门:POJ3469题意: 要在核A和核B组成的双核CPU上运行N个模块,模块i在核A上执行的花费为Ai,在核B上执行的花费为Bi。有M个相互之间需要进行数据交换的模块组合(ai,bi),如果这两个模块在同一个核上执行则没有额外花费,否则会产生wi的花费,请计算执行所有模块的最小花费。思路:在这里只说建图方法,更多解释详见挑战程序设计第二版P236。1.新建源点和汇点,所有源点向所原创 2017-06-17 16:52:04 · 416 阅读 · 0 评论 -
POJ - 3181 Dollar Dayz 完全背包 + 整数拆分(高精度)
传送门:POJ3181题意:有1到k共k种数,每种数有无限个,问能组成n的不同方案有多少种。思路:开始没想到要高精度,用了大白P63页的方法去做,wa一发,搜题解才发现这不就是个裸的完全背包么。。容量是n,有价值1-k的k种物品。因为题目没要求取模,所以要用到高精度,模拟大数加法可以做,不过dalao们都是将答案分成两部分,一部分计算高位,一部分计算低位,这样既能加快运算速度,写起来还简便原创 2017-07-21 13:51:35 · 935 阅读 · 0 评论 -
POJ - 2229 Sumsets 计数dp
传送门:POJ2229题意:用1,2,4,8这样的2的幂次数去组成n,问有多少种不同的组成方案。思路:打眼一看这不是完全背包裸题么,写完还真a了,不过总感觉事情没那么简单,一看discuss果然不出我所料。。解法一:完全背包。解法二:递推,分析如下:1. 当 n 为奇数时, f[n] = f[n-1], 因为只需在所有的序列前添加一个 1 即可, 所有的序列同时延迟 1原创 2017-07-21 20:17:28 · 202 阅读 · 0 评论 -
POJ - 2385 Apple Catching dp
传送门:POJ2385题意:有两颗苹果树,每分钟会从其中某一颗苹果树上掉下一个苹果来,初始在1号树下,可以在树间移动而不花费时间,但是最多移动w次,问最多能接到多少个苹果。思路:很明显的我们可以根据移动次数奇偶判断在哪颗树下,用dp[i]表示移动i次最多能接到多少苹果,然后对每一个掉下来的苹果进行O(w)的状态转移就好了。代码:#include#include#define l原创 2017-07-21 20:34:31 · 235 阅读 · 0 评论 -
POJ - 3616 Milking Time DP(区间的最大权独立集)
传送门:POJ3616题意:给出n个带权区间,要求从这n个区间中选取一个元素互不相交的子集,使得子集元素的权重和最大。思路:我自己的思路是dp[i]表示右端点小于等于i的所有区间所能得到的最大权重,然而因为按左端点排序排习惯了wa了好久。。代码:#include#include#include#define ll long long#define pb push_back原创 2017-07-21 21:10:32 · 452 阅读 · 0 评论 -
POJ - 3280 Cheapest Palindrome 区间DP
传送门:POJ3280题意:给定一个字符串,要将其变成回文串,删除一个字母和添加一个字母都有不同的花费,问最小花费是多少。思路:这题我真是没有思路,太弱了。。正解:dp[i][j]表示将[i,j]区间的字符串变成回文串的最小花费,然后又如下转移:如果s[i] == s[j] 那么 dp[i][i] = dp[i + 1][j - 1]否则 dp[i][j] = min(dp[原创 2017-07-21 21:27:02 · 237 阅读 · 0 评论 -
POJ - 1065 Wooden Sticks DP(LIS)|| 贪心
传送门:POJ 1065题意:要处理n个长为li,宽为wi的木棍,若处理完(li, wi)后接着处理(li', wi')且满足li' >= li, wi' >= wi 则不花费时间,否则花费1单位时间,问处理完n根木棍最少花费多长时间。思路:一开始想着贪心来着,谁让这是dp系列的题呢,就没敢写,没想到贪心还真能解。。解法一:利用Dilworth定理将本题转化为LIS问题,有关Dilwo原创 2017-07-22 14:53:55 · 308 阅读 · 0 评论 -
POJ - 1631 Bridging signals DP(LIS)
传送门:POJ 1631题意:这个题题意不好懂,不过看图就能明白了,就是让你去掉最少的线段,使得所有的线段都不想交。思路:将线段用点对表示,左端点为一个递增的序列1,2,3....n,右端点是一个1-n的排列,不难发现在这样情况下若要不相交,则左端点比前面大的线段的右端点一定也比前面的线段大,即在右端点的排列中找一个最长的递增子序列,转化为LIS求解。其实对着样例看也能看出是最长上升子原创 2017-07-22 21:25:10 · 203 阅读 · 0 评论 -
POJ - 3666 Making the Grade DP
传送门:POJ3666题意:给定一个序列Ai,要求将其变成一个非递减或者非递增序列Bi,花费为∑ |Ai - Bi|,问最小花费是多少。思路:首先我们明确如果需要将Ai改变,那么Ai要么变成Ai+1要么变成Ai-1,否则就不变,这样一定是最优的。我证明不了,不过可以自行举几个例子模拟一下改变过程就知道了。因此,Bi中的数必定都属于Ai,既然有了Bi的范围集合,那么我们就可以dp转移了,原创 2017-07-22 21:49:15 · 232 阅读 · 0 评论 -
POJ - 2392 Space Elevator 多重背包
传送门:POJ2392题意:有k种砖头,每种高为hi,可以摞到的最大高度为ai,数量为ci,问用这些砖头最多摞多高。思路:典型多重背包,算了算感觉不加优化也能过,写一发还真过了。。暴力:#include#include#define ll long long#define pb push_back#define fi first#define se second#def原创 2017-07-22 21:55:55 · 276 阅读 · 0 评论 -
POJ - 2184 Cow Exhibition 01背包变形
传送门:POJ2184题意:给定n个点对(a,b),从中选出任意个来,使sum(a)+sum(b)尽量大并且sum(a)>=0,sum(b)>=0.思路:开始我想的是dp[i][j]表示前i个点对sum(a)= j的时候的最大sum(b),算着复杂度也差不多,然而mle,看题解才恍然大悟,这不就是01背包么,a就是重量,b就是价值,虽然所求目标和01背包不太一样,但是我们将sum(a)当下原创 2017-07-22 22:10:57 · 227 阅读 · 0 评论 -
POJ - 3046 Ant Counting dp(多重集组合数)
传送门:POJ3046题意:有T种数,每种数有Ni个,问能组成不同的且元素个数属于[S,B]范围的集合共多少个。思路:大白P69例题,dp[i][j]表示从前i种物品中取出j个的组合总数,主要是有一个部分和问题的优化,想不到就会超时。代码:#include#define ll long long#define pb push_back#define fi first#def原创 2017-07-21 13:39:42 · 352 阅读 · 0 评论 -
POJ - 1742 Coins 多重背包+(二进制优化||单调队列优化)
传送门:POJ 1742题意:有n中面额的钱,每种有ci个,问1--m里有多少个数能用这些钱组成。思路:一看就知道是多重背包,不过是重量等于价值的特殊形态而已,并且数据量明显不能直接暴力,这里有两种优化方法,一是二进制优化,不过这里dp要换成bool数组表示能否组成的状态,要按普通背包写的话可能会t。二是单调队列优化,这个题普通的单调队列优化也是过不了的,在单调队列的基础上还要特判出0原创 2017-07-21 13:29:42 · 489 阅读 · 0 评论 -
POJ3734 矩阵快速幂
传送门:POJ3734题意:用红黄绿蓝四种色块组成长为n的线段,要求红色和绿色的色块数为偶数,问有多少种组成方法。思路:我是看着大白上的推出来的矩阵快速幂的公式做的,但是我看discuss里各路大神直接推出了线性公式,根本不用矩阵。。话说生成函数是个什么鬼啊。。要学的东西好多啊。。想知道具体思路的请自行查阅挑战程序设计第二版,上面分析的很清楚了。代码:#include#inc原创 2017-07-11 20:33:46 · 200 阅读 · 0 评论 -
Minimum Cost POJ - 2516 费用流
传送门:POJ2516题意:有n个客户,k种商品,m个仓库,每个仓库里都存有不等量的k种商品,现给出i种商品运送到客户j的单位花费,问满足所有客户需求的最小花费是多少,若不能满足需求则输出-1。思路:典型最小费用流,并且能否满足需求是可以提前算出来的,只要k种物品中的每一种都总需求小于总供应(即供大于求)就能满足。然后是建图,我们无法一下求出k种物品的最小花费,但由于k种物品是互不相干的,原创 2017-06-14 23:35:04 · 267 阅读 · 0 评论 -
POJ 1127 基础计算几何(判断两线段相交)+并查集
传送门:POJ1127题意:给定n条线段和多个询问(a,b),问a和b两个线段是否相交,相交的性质可以传递。思路:相交的传递性可以用并查集来维护,关键是如何判断两个线段是否相交,大白上给出了用向量内积和外积计算的方法,不过比较麻烦,dalao们通用的方法是进行两个判断:1.快速排斥就是初步的判断一下,两条线段是不是相交,以两条线段为对角线的矩形,如果不相交的话,那么两条线段一定原创 2017-07-15 16:03:51 · 1340 阅读 · 3 评论 -
POJ - 3045 Cow Acrobats 贪心
传送门:POJ 3045题意:有n头牛,每头牛有不同的重力w和力量s,现在要将它们叠罗汉一样的摞起来,定义risk(i)为第i头牛上面的所有牛的重量和减去第i头牛的力量,问最大的risk最小是多少。思路:个人思路:假设牛的总重量是W,若把第i头牛放到最下面,那么risk(i) = W - wi - si,把j号牛放在第二个上,那么risk(j) = W - wi - wj - sj,以此类原创 2017-07-30 13:04:39 · 295 阅读 · 1 评论 -
POJ - 3111 K Best && POJ - 2976 Dropping tests 最大化平均值(二分||牛顿迭代)
传送门:POJ3111 题意:给定n种物品,每种物品有不同的vi和wi,让你从中选出k种来使得∑v/∑w最大。思路:设∑v/∑w = x,我们的目标就是最大化x,因此我们可二分x,然后判断是否存在一个集合使得∑v/∑w >= x,关键是如何进行判断,显然直接枚举所有的集合是不现实的,可以考虑将不等式变形成∑(v - x * w) >= 0 ,这样我们就可以针对vi - x * wi 排原创 2017-07-30 13:27:11 · 301 阅读 · 0 评论 -
POJ - 3579 Median 二分 + 尺取法
传送门:POJ3579题意:给出一个序列x,问这个序列产生的所有| xi - xj |的中位数是多少。思路:二分答案,然后考虑每个数的贡献,关键是检查的时候如何判断每个数的贡献,可以对排序后的序列进行二分,这样总体复杂度为n(logn)^2,但是我们还有更好的方法,将序列排序后,用尺取的思想求得每一个数的贡献,总体复杂度为nlogn。代码:#include#include#in原创 2017-07-30 13:42:09 · 443 阅读 · 0 评论 -
POJ - 3685 Matrix 二分套二分
传送门:POJ3685题意:给定一个矩阵的通项公式,问第m大的数是多少。思路:根据 i2 + 100000 × i + j2 - 100000 × j + i × j 我们可以发现,对于固定的j,式子整体值的变化是随i的变化单调的。因此我们可以先二分答案,然后检查是否满足的时候对每一列再用一个二分,这样时间就够使了。因为会出现大小相同的元素,因此二分的时候一定要注意条件的原创 2017-07-30 14:06:32 · 247 阅读 · 0 评论 -
POJ - 3662 Telephone Lines 二分 + 最短路
传送门:POJ3662题意:有n个点,其中m对可以连边,但是有不同的花费,现在要求将1和n连通,你可以先选k对点使其免费连上,剩下的需要你自己花钱,定义费用为需要你花钱的边中花钱最多的那条边,问最小费用是多少。思路:显然尽量让长的边都免费是最优的,因此我们可以二分花费第k+1大的边(也就是答案),然后用最短路进行检查,看看能不能只用k条比mid费用大的边就能让1和n连通,由于比mid小的边原创 2017-07-30 14:21:47 · 378 阅读 · 0 评论 -
POJ - 1759 Garland 二分
传送门:POJ1759题意:给出一个递推公式Hi = (H i-1 + H i+1)/2 - 1, for all 1 和首项 H1 = A,问在保证所有项都非负的情况下第n项最小为多少。思路:容易得到 Hi+1 = 2 * Hi + 2 - Hi-1,接着向后推几项就可以知道H[n]一定可以用H[2] 和H[1]线性表示,因此我们可以二分H[2],然后判断有没有小于0的项就行了,原创 2017-07-30 14:37:32 · 245 阅读 · 0 评论 -
POJ - 2566 Bound Found 尺取法 + 前缀和
传送门:POJ2566题意:给定一个序列,求元素和的绝对值最接近t的子序列。思路:读完题会想到尺取法,然而由于元素有正有负,因此我们无法直接运用尺取法,尝试一下改变思路,先将前缀和求出来,然后对其进行排序,这样就变成了整体有序的一个序列,并且任选两个点其绝对值之差也对应于原序列的一个子序列的元素和。因此我们可以在这个序列上进行尺取,需要注意的就是子序列不能为空,因此l == r的时候要让r原创 2017-07-30 17:14:08 · 288 阅读 · 0 评论 -
poj1328贪心
本题难点在于思维的转化,应该通过海岛确定雷达的范围,再去重,而不是确定雷达的坐标看能覆盖几个岛。先对岛按x坐标排序,第一个雷达放在第一个海岛对应的区间的右端点,对后面的雷达坐标进行贪心,如果当前区间的左端点在上一个雷达的右边,则应放置一个新雷达在当前区间的右端点,如果当前区间的右端点在上个雷达左边则应把上一个雷达移到当前区间的右端点(思维难点,画图易懂,这时雷达如果不动的话无法覆盖当前区间对应原创 2016-09-18 21:29:46 · 382 阅读 · 0 评论 -
POJ - 1201 Intervals 差分约束 || 贪心 + 线段树
传送门:POJ 1201题意:给出n个三元组(ai, bi, ci),找出一组元素数目最少的整数集合,使得集合中包含在[ai, bi]之间的数不少于ci个。思路:设d[i]表示[0..i]区间内选中了几个整数,则题给条件可以转化为d[bi] - d[ai - 1] >= ci,并且由于d[i]是一个前缀和函数,还满足 0 代码:#include#include#include#原创 2017-08-07 20:04:56 · 278 阅读 · 0 评论 -
POJ - 2010 Moo University - Financial Aid STL(优先队列)
传送门:POJ2010题意:给出c个点对(a, b),从中选出n个来,使得sum(b)不大于f,并且由a组成的序列的中位数尽量的大。正解:先将所有的点对按a排序,假设k是中位数对应的点对在原序列的位置,由中位数定义可知,[1,k-1]中必定选了(n-1)/2个点对,[k+1,c]中也必定选了(n-1)/2个,而且无论剩下的点对怎么选,最后影响结果的都只是k中的a。又因为我们要满足sum(b原创 2017-07-23 19:23:41 · 202 阅读 · 0 评论 -
POJ - 3189 Steady Cow Assignment 二分 + 枚举 + (最大流||二分图多重匹配)
传送门:POJ3189题意:有n头猪,m个猪圈,每个猪圈都有一定的容量,每只猪对每个猪圈的喜好度不同(所有猪圈在每个猪心中都有一个排名),要求所有的猪都进猪圈,但是要求所有猪的喜好度排名最低的和最高的差值的绝对值最小。思路:这题网上很多做法,但综合来说无非 二分、枚举、最大流、二分图多重匹配,二分就是二分题目中问的差值的绝对值,枚举就是枚举上界或者下届,最大流或者二分图多重匹配就是用来检原创 2017-07-24 20:56:58 · 322 阅读 · 0 评论 -
POJ - 3204 Ikki's Story I - Road Reconstruction 最大流(残余网络应用)
传送门:POJ3204题意:给定一个流网络,找到扩充其容量就能使最大流的流量增加的边,并统计有几条。思路:根据最大流性质,很容易知道只有最大流中的满流边才有可能成为满足题意的边,因为非满流边你再扩充它它也不可能满流,假设满流边为(u,v),还要满足s到u的存在非满流路径,v到t存在非满流路径才能使得(u,v)成为满足题意的边。所谓非满流路径就是指存在这样一条路径,路径上的边都是非满流的。原创 2017-07-24 21:26:43 · 343 阅读 · 0 评论 -
POJ - 1486 Sorting Slides 二分图最大匹配(求关键边)
传送门:POJ1486题意:给出一些重叠的矩形,按照给出的顺序分别编号为A、B、C。。然后再给出一些点,根据给出的顺序分别编号为1,2,3。。。问能否确定某个点一定在某个矩形上(每个矩形上都有且只有一个点)。思路:很容易看出是一个二分图完备匹配问题,关键是如何确定某个点是否只能在一个矩形上,即寻找二分图中匹配是唯一的点。解决的方法是先做一次最大匹配,然后枚举删除匹配中的每条边,如果删除原创 2017-08-16 15:41:26 · 459 阅读 · 0 评论 -
POJ 3691 DNA repair AC自动机 + dp
传送门:POJ3691题意:给定一个原字符串S和n个禁止模式串p1,p2...pn,请修改字符串S,使得其中不包含任何禁止模式串,只能将S中的字符修改为其他字符而不能增加或删除,如果怎么修改都不行,输出-1,否则输出最少修改次数。思路:挑战程序设计P370例题,但是白书上不是用ac自动机做的,而是暴力预处理,我看网上dalao都是ac自动机或者说Trie图预处理,就学着写了一发,这也是第一原创 2017-08-02 16:34:42 · 349 阅读 · 0 评论 -
POJ - 2836 Rectangular Covering 预处理 + 状压DP
传送门:POJ2836题意:坐标平面上有n各点,用任意大小(非零)的矩形覆盖它们,每个矩形至少覆盖两个点,矩形边长为正整数,求最少所需要的矩形的总面积。思路:先将平面上任意两个点组成的矩形预处理出来,并将每个矩形内部包含的点的状态压成一个整数,然后进行dp,dp[s]表示覆盖的点集状态为s的最小面积,枚举每个预处理出来的矩形进行转移就好了。代码:#include#include原创 2017-08-09 23:35:34 · 318 阅读 · 0 评论 -
POJ - 1795 DNA Laboratory 状压DP + dfs
传送门:POJ1795题意: 给出n个字符串,问包含这n个字符串的最短的总串字典序最小是多少。思路:思路来自:http://blog.csdn.net/qq_29169749/article/details/54755026dp[i][s]:=在所有字符串选取情况为s的状态下,最前面的字符串为i号字符串的最小长度。依次枚举下一个字符串可得状态转移方程 dp[i][s | 1 c原创 2017-08-09 23:44:35 · 359 阅读 · 0 评论 -
POJ - 3411 Paid Roads 状压DP || dfs
传送门:POJ3411题意:N个城市间有m条单向路,分别从a到b,可以在c处交P路费,也可以到b处交R路费。问从1到n的最少花费是多少。思路:状压DP, dp[s][i]表示经过的城市集合状态为s,且当前在i号城市的最少花费。注意由于原图有可能有环路,因此某个点可能经过不止一次,因此在状态转移的过程中有类似于dijkstra中的松弛操作,即对某一个状态不断更新。 这题另外的解法是原创 2017-08-10 23:23:17 · 336 阅读 · 0 评论 -
POJ - 2886 Who Gets the Most Candies? 树状数组 + 二分 + 反素数
传送门:POJ2886题意:n个小朋友在玩一种类似于约瑟夫环的游戏,定义F(p)表示p的约数个数,第p个出队的将会得到F(P)个糖,问哪个小朋友得到的糖最多。思路:首先明确我们一开始就能知道第几个出队的小朋友能得到最多的糖果,并且这还是一类特殊的数,叫反素数,定义:对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整 数,都有,那原创 2017-08-04 17:01:43 · 240 阅读 · 0 评论 -
POJ - 2155 Matrix 二维树状数组(区间更新,点查询)
传送门:POJ2155题意:给一个n*n的01矩阵,然后有两种操作:1.C x1 y1 x2 y2是把这个小矩形内所有数字取反2.Q x y 是询问当前这个点的值是多少?思路:很容易想到要用树状数组或线段树。树状数组的话显然是不能暴力更新的,这时候就要用到一个类似于imos法的思想了,关于imos法:点击打开链接(只看图理解思想就好了,感觉里面的代码写的有问题)首先要注意的原创 2017-08-04 17:23:41 · 330 阅读 · 0 评论 -
POJ - 3109 Inner Vertices 扫描线 + 树状数组
传送门:POJ3109题意:一个无限大的棋盘上,在横向和纵向上都被黑子包围的白子会变成黑子,求最终黑子个数?思路:首先要想明白这个改变的过程会一次完成,不会因为新产生的黑子而产生更多黑子。运用扫描线的思想,想象一条竖直线从左到右扫过去,我们只处理在这条线上有多少个黑点(包括即将变成黑点的白点),对于线上的点,只要它左右两边都有黑点那么该点就要被算进去,因此我们可以将y坐标离散化以后,先原创 2017-08-04 17:42:32 · 584 阅读 · 2 评论 -
POJ - 2987 Firing 最大权闭合子图(最小割)
传送门:POJ 2987题意:老板决定裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误。给出每个人的贡献值和从属关系,求最小裁员数及最大贡献值和。定理:最大权闭合图的的权=原图中权值为正的点权和 - 最小割(最大流)正解:最大权闭合图定理题,证明及相关建图方法放到代码后面,这题关键是求最小裁员数的部分有意思,由于定理中的相关内容,正常思路是求完最大流后在从源点开原创 2017-07-24 20:15:53 · 374 阅读 · 0 评论 -
POJ - 3762 The Bonus Salary! 区间图的最大权独立集(最大流)
传送门:POJ3762题意:每天都有n种工作,每种工作有不同的价值,每种工作只能做一次,某一时刻只能做一种工作,问k天内最多可获得的价值是多少。思路:这题就是POJ3680的翻版,做法详见POJ3680。代码:#include#include#include#include#include#define ll long long#define inf 0x3f3f3f3原创 2017-07-24 18:43:55 · 202 阅读 · 0 评论 -
Aizu - 2170 Marked Ancestor 并查集好题
传送门:AIZU2170题意:给出一颗树,有两种操作:1. mark u 标记结点u2.query u 询问离u最近的且被标记的祖先结点是哪个让你输出所有询问的和。思路:刚读完题感觉是LCA一类的东西。。想到了离线处理,也想到了按标记和询问的先后搞事情,然后就没思路了。。正解:将所有被标记的结点记录他们最早被标记的时间,然后将所有询问记录下来并倒着处理,因为如果我们原创 2017-07-23 19:43:38 · 432 阅读 · 0 评论 -
POJ 2441 Arrange the Bulls && POJ 3254 Corn Fields 状压DP入门
传送门:POJ2441题意:将n头牛分到m个牛栏里,每头牛都有自己喜欢的牛栏,每个牛栏只能放一头牛,问共有多少种分配方案。思路:由于n和m都很小,状压搞一搞就好了,dp[i]表示m个牛栏的状态为i的分配方案(将i转化为2进制,1表示有牛,0表示没有牛)__builtin_popcount(k)返回k的二进制中有多少个1代码:#include#include#include原创 2017-08-07 23:57:31 · 224 阅读 · 0 评论