代码改变世界

阅读排行榜

任务调度问题1—贪心算法

2012-10-12 18:50 by kliner, 8196 阅读, 收藏,
摘要: 这个问题是《算法导论》上的一个经典的贪心算法问题——单处理器上具有期限和惩罚的单位时间任务调度问题,目标是使惩罚最小。输入:第一行一个数n,接下来第2行到第n+1行,第i行分别是d[i]和w[i],其中d[i]表示第i个任务的时限,w[i]表示第i个任务的惩罚,每个任务的完成时间为单位时间。输出:一行一个数,为最小惩罚。题解:令集合S为所有任务的集合,A为一个任务集合,其中所有的任务满足条件:存在某种调配方式,使得所有任务能在期限前完成,又令l为所有A集合的集合。可以证明,序对M=(S,l)是一个拟阵,于是,可以采用贪心算法解决它。同时,一个任务集合R属于l,当且仅当它满足下列条件:R中在期限 阅读全文

总结排列组合在OI中的应用

2012-10-12 19:07 by kliner, 650 阅读, 收藏,
摘要: 排列组合的思想是每一位OIer都必须掌握的技能,并且不仅要掌握高中课本所学的内容,更应该学会用递推的思想解决一些我们现在的知识不能直接解决的排列组合的问题。接下来是几个不同的经典“盒子与球”问题。e.g 1:有m个相同的球,n个不同的盒子,将球放入盒子中且不允许有空的方法为多少?解答:采用高中数学的插板法即可解决。总方法数为C(m-1,n-1)。e.g 2:主干与例1相同,只是改为允许有空。解答:将m个球上加上n个球,问题即变为m+n个球放入n个盒子且不允许盒子有空的方法。注意这里的化归思想。e.g 3:将m个不同的球放入n个相同的盒子且不允许有空的方法?解答:适用于第二类斯特林数。令f[i] 阅读全文

利用单调队列优化动态规划

2012-10-12 19:05 by kliner, 514 阅读, 收藏,
摘要: 可用单调队列优化的动规有一大类题型,它们多半都有一个特征:可以化归为序列中定长区间的最值问题。注意这里必须是定长区间,否则应用RMQ算法。下面举一个例子:输入:第一行两个正整数N(N<=600000),M。接下来一行N个数。输出:对于每个区间[i,i-M+1],输出其中的最小值。思路:很显然这道题数据大到不允许利用RMQ的各种O(NlogN)的算法,想到每一次找最小值都只是将上一个区间后移一个数,即这个区间的答案很有可能可从上个区间获得,于是保持一个单调队列,区间每后移一次,就将num[i]插入队尾,若队尾的数Q[k]大于等于当前的数(num[i]),就说明Q[k]在以后就不可能是一个可 阅读全文

浅谈快速求逆序对

2012-11-07 13:09 by kliner, 463 阅读, 收藏,
摘要: 利用树状数组(有时是线段树,有时利用单调队列)可将某些特定问题的时间中的"N"的一维降为"lgN"的一维 阅读全文

NOI导刊2008第十套trans 结题报告

2012-10-11 19:08 by kliner, 335 阅读, 收藏,
摘要: 题目大意:对于由某个从A到Z所有字符不重不漏构成的字符串,如HRSLCZDKIYXUNOMTGVJEFAWBPQ,这表示把'A'置换为'H',把'B'置换为'R'......把'Z'置换为'Q'。现在我们把这个置换进行两次从而得到一个新的置换。你的任务是判断一个字串是否是由一个置换操作两次得到的新的置换。输入:一个由'A'到'Z'不重不漏组成的字符串。输出:若这个字串是否是由一个置换操作两次得到的新的置换,输出"Yes",反之,输出"No 阅读全文