03 2014 档案
摘要:题意:S<=x1+x2+...+xT<=B0<=x1<=N10<=x2<=N2...0<=xT<=NT求这个不等式方程组的解的个数。分析:即求(1+x1+x1^2+x1^3+...x1^N1)(1+x1+x1^2+x1^3+...x1^N2)...的展开式中指数为s~B的系数之和,那么多项式乘法撸撸就行了
阅读全文
摘要:题意:多重背包的w=v特殊情况分析:此题如果用单调队列O(nv)会被无耻卡常数……然后鉴于此题W=V,所以只存在背包恰好为i的是否存在,即bool型的f[i]是否为1即往背包染色上面考虑如果是完全背包,那么有f[j]=f[j]|f[j-v[i]]那么此题是不是不可以做呢?并不是,我们可以记录下每个状态所用的物品的个数,限制一下即可,不影响结果(因为这实际上不能算是dp,因为没有最优的抉择的选举,只是刷一遍)教主果然吊……Orz StQ
阅读全文
摘要:题目大意:给你一个序列a[1....n],让你求一个序列b[1....n],满足 bi =a && bc,则最小的调整可以是把b变成c.所以归纳可知上面结论成立。dp[i][j] 表示考虑前i个元素,最后元素为序列中 第j小元素的最优解,a[]数组存原始数组,b[]是对a从小到大排序。dp[i][j] = MIN(dp[i-1][k]) + abs(a[i]-b[j]), (0<k<=j)虽然第一眼会看见是空间n^2 时间n^3的,但是可以发现min(d[i-1][k])可以边做边保存,于是状态转移的时间变成了O(1),且空间也可以滚动,所以最后是空间n,时间n^2
阅读全文
摘要:1、POJ1258水水的prim……不过poj上硬是没过,wikioi上的原题却过了 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=100,inf=1e8; 6 int d[maxn+50],g[maxn+50][maxn+50],ans=0,n; 7 bool v[maxn+50]; 8 int main() 9 {10 scanf("%d",&n);11 for(int i=1;i 2 #include 3 #include 4 #include 5 using
阅读全文
摘要:http://poj.org/problem?id=1989题意:求一个序列的最短非子序列长度l,即长度小于l的所有数的排列都是原序列的子序列(不一定要连续的),求l得最小值。分析:我们从左到右扫一遍,将所有包含1..k的分为一组,ans=组数+1如样例:(1,5,3,2,5,1,3,4)(4,2,5,1,2,3)[],故ans=3简单的说明就是可以从每组中抽出一个数作成排列,然后发现的确ans=组数+1是最小的满足的
阅读全文
摘要:http://poj.org/problem?id=1985题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长)分析:1、树形dp:只要考虑根节点和子节点的关系就可以了2、两次bfs: ①任意从一个点u出发bfs,设其能到的最远点为v ②从v出发重新bfs,设其能到达的最远点为s ③则树的直径就是v->s证明: 若能证明从任意一个点出发,bfs到的最远点一定在树的直径的端点上,那么第二次bfs就可以证明一定正确了,下面来证明第一次bfs正确性: ①若选择的点u在直径上,那么能到的最远点v一定是树的直径的端点之一 反证: 若v不是树的直径的端点,设树的直径的端点...
阅读全文
摘要:http://poj.org/problem?id=2375题意:一个500*500的矩形,每个格子都有一个高度,不能从高度低的格子滑到高度高的格子(但相等高度可以滑),已知可以在2个相邻格子上加桥,使得无视他们的高度就可以互相滑,问最少加多少桥可以使得在任一个格子上都能到达任一个格子。分析:很容易看出这就是相当于在一个有向图上至少加多少边可以使得其强联通,ans=max(入度0的点数,出度为0的点数),很好理解,可以把出度为0的点挂一条边到入度为0的点上,多了的随便挂。那么现在面临的问题的就是要把25000个点先求强连通分量缩点,但是一般的算法会爆栈(其实手写栈也行……),那么鉴于这图的特殊
阅读全文
摘要:http://poj.org/problem?id=2373题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草区域内不允许有雨伞间隙,即只能被1把雨伞覆盖,求将n块田都覆盖的最少雨伞数。分析: 易写出dp式子,dp[i]表示覆盖[0,i]需要的最少雨伞数量—— 若i不为某一奶牛的领地:dp[i]=min(dp[j])+1,i-2b<=j<=1-2a,且j不属于某一只奶牛的领地 若i为某一奶牛的领地:dp[i]=inf这里面临两个问题:1、Q:如何快速处理处牛的领地,即我们如何快速知道哪些点要..
阅读全文
摘要:http://poj.org/problem?id=2112题意:有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶。每个挤奶器和奶牛之间都有一定距离。求使C头奶牛头奶牛需要走的路程的最大路程最小。分析:看到“最大的最小”这种字眼多半是二分枚举,容易想到二分枚举最小的最大路程,设其为max,那么接下来就是判定max合不合法了。故先把那些小于等于max的边加入二分图,如果这个二分图的多重匹配最多能匹配的数量恰恰等于奶牛数,那么说明所有奶牛都能挤到奶,即max合法,反之不合法。步骤:1、先floyd处理出每个奶牛和每个挤奶器之间的最短距离。2、二分枚举最小的最大路程max,并将<=max
阅读全文
摘要:http://poj.org/problem?id=2110题意:给你一个n*n矩形(n<=100),每个位置上都有一个数字代表此处山的高度,要从(1,1)走到 (n,n),要求一条路径使得这条路径上最高山和最矮山的高度差最小,输出这个最小高度差。分析:这个n很小,所以容易想到bfs撸,但n也不小,直接bfs会撸爆,于是可以二分最后的高度差下界,然后bfs判定,这样大大减少了每次bfs的遍历结点个数,节省了大量时间和空间。
阅读全文
摘要:http://poj.org/problem?id=2018此乃神题……详见04年集训队论文周源的,看了这个对斜率优化dp的理解也会好些。分析: 我们要求的是{S[j]-s[i-1]}/{j-(i-1)}最大,可以发现这个形式满足直线斜率式,于是原题就可以看成平面上有一些点P(i,s[i]),然后求这些点中横距大于F的两点的最大斜率。 这么转化后仍然需要n^2的枚举 但当你枚举一个点,并在前面的点中枚举找到一个和它结合斜率最大的解时,可以发现是像凸包那样的维护一个下凹的曲线,因为如果某个点是上凸的,那么易得这个点得到的斜率必定不会比前一个点大!这也就是说我们在从F..n枚举区间的最右端点...
阅读全文
摘要:http://poj.org/problem?id=2138题意:给你一些单词和初始单词,在初始单词的任意位置你可以加任意一个字母,使得这个新单词在给的单词中有所出现,然后在这样不断迭代下去,让你求出最远能到达的单词。分析:长度为len的单词只能由长度为len-1的单词得到,故可以把每个单词看成一个节点,处理节点之间是否连边,鉴于n很小,可以朴素的O(n)扫描。然后就是跑一边最长路。又因为是DAG图,所以dp是可以且更优的
阅读全文
摘要:http://poj.org/problem?id=2229分析:显然的递推若n为奇数,那么肯定是在n-1的基础上前面每个数+1,即f[n]=f[n-1]若n为偶数 当第一位数字是1的时候,等同于f[n-1] 当第一位数字不是1的时候,因为都是2的倍数,可以提出一个2来,即与f[n/2]相同综上,n为偶数时候,f[n]=f[n-1]+f[n/2]
阅读全文
摘要:http://poj.org/problem?id=2187题意:老题了,求平面内最远点对(让本渣默默想到了悲剧的AHOI2012……)分析:nlogn的凸包+旋转卡壳附:http://www.cppblog.com/staryjy/archive/2009/11/19/101412.html旋转卡壳的
阅读全文
摘要:题目:http://poj.org/problem?id=2185题意:就是要求一个字符矩阵的最小覆盖矩阵,可以在末尾不完全重合(即在末尾只要求最小覆盖矩阵的前缀覆盖剩余的尾部就行了)分析: 先看一维的,对于一个一维字符串的最小覆盖子串首先肯定是它的一个前缀,而这个前缀的最小长度为n-next[n],证明在这里http://blog.csdn.net/fjsd155/article/details/6866991 然后发现这题就是二维的,于是可以考虑求出所有行的最小覆盖子串长度,而这些长度的lcm就是我们要求的最小覆盖子矩阵的一边长,同理对列也这么处理得出另一边长,然后相乘得到面积。(值得..
阅读全文
摘要:http://poj.org/problem?id=2184题意:01背包的变种,就是说有2组值(有负的),你要取一些物品是2阻值的和非负且最大分析:1、对于负的很好处理,可以把他们都加上一个数使其变成正数2、对于两个变量可以控制一个变量,求另一个变量的最大值,那么接下来的问题就是处理“体积恰好为V的01背包”问题了(和普通的不同哦……普通的不一定装满的)以前处理恰好体积为V的01背包都是开数组染色刷一遍的,原来有更好的方法,就是初始值是f[0]=0,f[1..V]=-inf,那么转移中f[j]=f[j-v[i]]+w[i],若j-v[i]表示的背包没有装满那么这个就不能转移了……真心有点机智
阅读全文
摘要:Rebuilding RoadsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 8589 Accepted: 3854DescriptionThe cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra r
阅读全文
摘要:Cow CyclingTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 2468 Accepted: 1378DescriptionThe cow bicycling team consists of N (1 <= N <= 20) cyclists. They wish to determine a race strategy which will get one of them across the finish line as fast as possible. Like everyone else, cow
阅读全文
摘要:Power Hungry CowsTime Limit: 1000MS Memory Limit: 30000K Total Submissions: 4570 Accepted: 1120 DescriptionFJ's cows would like to be able to compute integer powers P (1 <= P <= 20,000) of numbers very quickly, but need your help. Because they're going to be computing powers of very la
阅读全文
摘要:Fiber CommunicationsTime Limit:1000MSMemory Limit:30000KTotal Submissions:3804Accepted:1160DescriptionFarmer John wants to connect his N (1 <= N <= 1,000) barns (numbered 1..N) with a new fiber-optic network. However, the barns are located in a circle around the edge of a large pond, so he can
阅读全文
摘要:【问题描述】游戏里一共会冒出来N个地鼠,这些地鼠冒出来的位置都分布在一条直线上。第i个地鼠会在Ti时刻在Xi位置冒出来,打到第i个地鼠的得分是Pi。当游戏开始时(也就是0时刻),JYY左手的位置为XLEFT,右手的位置为XRIGHT。JYY的手的最大移动速度是V(每单位时刻最多移动的距离为V)。地鼠会在瞬间冒出来然后消失。如果在对应的时刻JYY的一只手恰好也在地鼠冒出来的位置,那么JYY就可以在瞬间完成击打动作并得到对应的分数;否则,JYY就只能错过这只地鼠了L。JYY两只手都拿着锤子,所以两只手是可以同时打地鼠的。然而,如果在游戏过程中JYY的两只手交叉的话,JYY会感到很不舒服(这个动作确
阅读全文
摘要:[Ahoi2013]立方体Time Limit:10 SecMemory Limit:64 MBSubmit:130Solved:55[Submit][Status]Description在一个三维空间中有N个立方体,第i个立方体占据x_i1,y_i1, z_i1 --- x_i2, y_i2, z_i2的位置。这N个立方体可能有相交,也可能重叠。这N个立方体构成一个大的几何图形。现在求这个几何图形的外表面积Input第一行,一个整数N,表示立方体的个数。第二行至第N+1行,每行6个用空格隔开的整数,分别表示x1,y1,z1,x2,y2,z2.Output一行,一个整数,表示外表面积的大小。S
阅读全文
摘要:[Ahoi2013]找硬币Time Limit:10 SecMemory Limit:64 MBSubmit:348Solved:114[Submit][Status]Description小蛇是金融部部长。最近她决定制造一系列新的货币。假设她要制造的货币的面值为x1,x2,x3…那么x1必须为1,xb必须为xa的正整数倍(b>a)。例如1,5,125,250就是一组合法的硬币序列,而1,5,100,125就不是。不知从哪一天开始,可爱的蛇爱上了一种萌物——兔纸!从此,小蛇便走上了遇上兔纸娃娃就买的不归路。某天,小蛇看到了N只可爱的兔纸,假设这N只兔纸的价钱分别是a1,a2…aN。现在小
阅读全文