procedure2012
It's not worth it to know you're not worth it!
摘要: [题目来源]:Beijing 2008[关键字]:模拟[题目大意]:用字符的形式给出n窗口,以他的编号作为它的边(中间是空的),找出所有在最上层的窗口。//=====================================================================================================[分析]:先找到每一个窗口的左上角,如果找不到则必不可能是最顶上的,然后利用左上角找到可能的宽和长,再以此判断此长和宽是否成立(没有其他窗口覆盖)。[代码]:View Code 1 program Project1; 2 var 3 p... 阅读全文
posted @ 2011-11-02 08:28 procedure2012 阅读(241) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:Romania OI 2002[关键字]:动态规划[题目大意]:在一个天平中,有N个挂钩,挂钩距离在[-15..15]之间,-代表在左臂,+代表在右臂,挂钩距离依次从小到大给出。有M个砝码,砝码重量在[-25..25]之间,砝码重量依次从小到大给出。求,用上所有砝码将天平平衡的方法有多少种。//=====================================================================================================[分析]:将所有砝码与所有挂钩相乘,所得就是砝码挂在挂钩上时对平衡的贡献,以边为负另一边 阅读全文
posted @ 2011-11-02 08:16 procedure2012 阅读(191) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:IOI 2000[关键字]:动态规划[题目大意]:把一个字符串变成回文串所需的最小步骤。//=====================================================================================================[分析]:因为回文串的要求是正着读和倒着读是一样的,即把这个字符串倒置后进行匹配,用动态规划求出所需最小操作数。f[i,j]={f[i-1,j-1]|s1[i]=s2[j],min{f[i-1,j],f[i,j-1]+1|s1[i]<>s2[j]}}。但是最后要除以二,因为两个字 阅读全文
posted @ 2011-11-02 08:07 procedure2012 阅读(186) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:Taejon 2001[关键字]:动态规划[题目大意]:给出两个基因序列,可以在其中插入‘-',根据给出的每个字母对应的值,求出使这两个变得长度相等所需的最大值。//=====================================================================================================[分析]:就是LCS的变形,其中f[i,j]=max(f[i-1,j-1]+a[ord(s1[i]),ord(s2[j])],f[i-1,j]+a[ord(s1[i],'-')],f[i,j-1 阅读全文
posted @ 2011-11-02 07:44 procedure2012 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 单调队列优化多重背包(转自:http://hi.baidu.com/lydrainbowcat/blog/item/d9fb791fc48ae1e0e0fe0bab.html) 多重背包仅涉及体积而不涉及价值的一类可以使用染色在O(nv)时间、20行左右秒过,然而对于涉及价值的多重背包,则要使用二进制拆分物品优化,或者使用效率更高应用更广的单调队列(O(nv))。 若有n种物品,背包容量为m,物品体积、价值、最大使用次数为v,w,c,则朴素的动规方程为:f[i]=max{f[i-v*k]+w*k} (1<=k<=c)。我们把所有可能达到的体积按照除以当前物品体积v的余数划分为0~v 阅读全文
posted @ 2011-11-01 23:16 procedure2012 阅读(710) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:NOIP基础题集[关键字]:图论 连通性[题目大意]:十字绣一针只能正反交错进行,问对于给定图案至少需要多少针。//=====================================================================================================[分析]:首先将图划分成不同的连通块,每一块至少要用一针,所以只要计算每个块内要用几针再相加。将正面的连线看作正边,反面的为负边。因为对于每一个点,如果有一条正边则代表正面有一条线,有一条负边则代表反面有一条线,而正负边之差,就是以此点位开始的线的数量,而这样的线必定 阅读全文
posted @ 2011-11-01 20:42 procedure2012 阅读(168) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:NOIP2007普及组[关键字]:贪心[题目大意]:守望者的跑步速度为17m/s,守望者拥有闪烁法术,可在1s内移动60m,每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间能走的最远距离。//======================================================================[分析]:AC做法是贪心。易证闪烁最然需要回 阅读全文
posted @ 2011-11-01 11:04 procedure2012 阅读(1457) 评论(0) 推荐(1) 编辑
摘要: [题目来源]:NOIP2003普及组[关键字]:动态规划[题目大意]:将一个n个数字组成的环分成m份,使每份之和对10取模后相乘的积最大或最小。//======================================================================[分析]:类似于石子合并的动态规划,解法比较暴力(n<=50 m<=9)。枚举每一个点,以此为起点将环断开,然后f[i,j]为以枚举断链的点开始前i个分成j组的最大(最小值),f[i,j]=f[k,j-1]*sum[k+1,i],具体i,j,k所代表的含义有点不同,结合代码再仔细看吧。[代码]:Vi 阅读全文
posted @ 2011-10-31 20:25 procedure2012 阅读(256) 评论(0) 推荐(0) 编辑
摘要: [题目来源]:NOIP2004[关键字]:数学[题目大意]:求2p-1的位数,和后500位。//======================================================================[分析]:求位数可以用数学方法求:N的位数=log10(N),所以2p-1的位数=log10(2p-1)=p*log10(2)。第二问要用高精度求出后500位就行,但是要用快速幂。[代码]:无第一问View Code 1 program Project1; 2 const up = 10000; 3 type 4 rec = record 5 ... 阅读全文
posted @ 2011-10-31 17:46 procedure2012 阅读(292) 评论(0) 推荐(2) 编辑
摘要: [题目来源]:NOIP2004[关键字]:二分图[题目大意]:判断是否能用两个栈将给定的序列排列成升序,如果能则输出操作序列。//======================================================================[分析]:易证对于i<j如果存在k,使i<j<k且a[k]<a[i]<a[j]则i和j必定不能在同一个栈里,所以将他们连一条无向边。然后就是利用染色法判断是否是一个二分图。染色时吧标号小的放进栈1就能得出字典序小的操作序列。[代码]:View Code 1 var 2 a, b: array[0.. 阅读全文
posted @ 2011-10-31 17:29 procedure2012 阅读(280) 评论(0) 推荐(0) 编辑