摘要: http://poj.org/problem?id=3041将行与列转化为左右点集,只要出现Asteroids的点(i,j)就对i j建边,然后求最小点覆盖即可。。。View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 507using namespace std;int map[maxn][maxn];int link[maxn];bool vt[maxn];int n,m;bool dfs(int rpos){ int i; for (i = 1; i & 阅读全文
posted @ 2012-03-14 22:05 E_star 阅读(289) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3687本人强烈推荐这道题。。。才开始自己理解错了题意,以为单纯的利用优先队列每次从入度为0的队列中选出编号最小的点即可,样例过了可是无限WA最后看了看解题报告,原来我理解错了。要求序列小的要尽量靠前,而且输出的不是得到的序列,而是根据序列得到的重量。。很不错的解题报告,本人转载:在基本的拓扑排序的基础上又增加了一个要求:编号最小的节点要尽量排在前面;在满足上一个条件的基础上,编号第二小的节点要尽量排在前面;在满足前两个条件的基础上,编号第三小的节点要尽量排在前面……依此类推。(注意,这和字典序是两回事,不可以混淆。)如图1所示,满足要求的拓 阅读全文
posted @ 2012-03-14 21:03 E_star 阅读(259) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3267从后往前推,只要发现匹配的就进行匹配。dp[i] = min(dp[i) ,dp[t] + t - i - len[j])dp[i]表示在i位置至少要删掉多少个字母,t记录了完成单词匹配后的下一个位置,t - i - len[j]表示在i起始位置完成单词匹配这个中间最少要删去的单词数View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 307using namespace std;char str[6 阅读全文
posted @ 2012-03-14 09:32 E_star 阅读(239) 评论(0) 推荐(0) 编辑