摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1233题意:中文。。mark:这就是传说中的最小生成树。。。第一次做最小生成树,看别人题解说是很裸的,思路也很简单。 第一次随便取一个点,比如a1,则集合变成{a1}, {a2, a3, ...},然后从右边的集合找到一个距离左边集合最近的点加入左边,以此重复n-1次。代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream&g
阅读全文
摘要:地址:http://ac.jobdu.com/problem.php?pid=1005题意:n个学生,m个学校,每个学校q[i]个名额。主旨是学生选学校。每个学生有k个选择,选择优先权是从高到低,每个学生有两个分数ge和gi,如果(ge+gi)/2比较高,则排名 高,如果相等则比较ge,如果仍然相等,则排名相等。学生按照排名先后选择学校,轮到该学生选择学校时,如果当前选择的学校名额已满,就看选择的下一个学校,以此类 推,如果所有学校都满,则无学校可选。特殊情况:当同等排名的学生且选到相同学校,如果该学校名额不够分配给同等排名的学生,会破格录取这些学生。mark:该题用C++STL的...
阅读全文
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=4512题意:中文。。mark:最长升序公共子序列(LCIS)的一个小变形,最长公共子序列具体可以百度。 假设两个字符串为a,b,状态dp[i][j]代表a的前i个字符和b的前j个字符的最大匹配 当a[i] == b[j]时,dp[i][j] = max(dp[i-1][k])+1,k是[0 ... j-1]。 当a[i] != b[j]时,dp[i][j] = dp[i-1][j]。 dp[i-1][k]可以通过维护一个变量实现O(1)的算法,所以时间复杂度优化后是O(n^2),...
阅读全文
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=4521题意:中文。。mark:看网上大部分解题报告都是用线段树,我又不是很懂线段树,后来突然发现有一个人用变种的LIS做的,顿时来了兴致~ 普通的LIS要求O(nlgn)的算法的时候,需要维护一个栈,每次元素比较当前栈顶元素,如果大,直接放入栈顶,否则二分查找到第一个大于它的数,替换它,具体证明就不说了。。。本题有一个限定条件是,LIS里面的序列在原数组里面的位置是要大于d的,那么解决办法就是延缓入栈(我自己随便取的名字),就是你每次计算当前元素能够组成的最长子串的时候,二分到它之前所能组成的最大...
阅读全文
摘要:我那颗想要ac的心怎么能够沉寂了,看着别人刷题,我的心很痒,但是生活总是有舍有得的,哥哥一开始就给我警告了,不要重蹈他的覆辙,为了acm耽误考研,是不明智的选择,于是我一直憋着不去想acm的事,专心复习考研,但是我忍不了啊,实在不能忍受自己的弱小,现在我决定每天刷一题,当然做cf除外了,好吧,就从今天开始,继续我喜欢的ac之路~
阅读全文