摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1800 树DP,要求求出最小覆盖点集,并且要求两端都有覆盖的边尽可能多。于是,这题可以通过赋权,求树的最小权值。无向无环图通过dfs变成有根树一棵,然后对每个树根DP,最后得到答案。代码如下:View Code 1 #define REP(i, n) for (int i = 0; i < (n); i++) 2 3 int dp[2][N]; 阅读全文
摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1832 博弈类的DP,通过枚举较短一段的最大得分推出较长一段的最大得分。转移方程是 dp[i][j] = sum[i][j] - min(dp[i][i], dp[i][i + 1], ... , dp[i][j - 1], dp[i + 1][j], dp[i + 2][j], ... ,dp[j][j])。O(n^3)算法:View Code 1 #define REP(i, 阅读全文
摘要:
2741 -- Colored Cubes 十分好的一个暴力枚举题,题意是,给出最多4个筛子,每个面都有一个颜色标记,要求求出最少改变多少个面,使得这些筛子可以通过某些旋转使其完全相同。 刚接到这题的时候,有点老鼠拉龟的感觉,首先想到的居然是dp。。。然后细心一想,这个题最多才4个筛子,何不直接暴力枚举呢?枚举复杂度最多才到O(24^n),因为筛子一共有24种放置的方法。然后一个问题就来了,这24种状态要怎么搞出来?一个不小心错了一个数字就很难debug 的了。于是,我在草稿纸上写了前面是1的4种情况,然后发现其余的,前面是2~6的各自的4种情况都是一样的转换方式,所以之后的直接利用转换即.. 阅读全文
摘要:
一道关于稳定婚姻的匹配题,算法的详细解释可以参考Matrix67的文章。下面是我根据算法思路写出来的代码:View Code 1 int comCan[N][N]; 2 int like[N], canLV[N][N]; 3 4 void input(int n) { 5 int x; 6 REP_1(i, n) { 7 REP_1(j, n) { 8 scanf("%d", &x); 9 comCan[i][j] = x - n;10 }11 }12 REP_1(i, n)... 阅读全文
摘要:
http://poj.org/problem?id=1077 一道经典到不能再经典的搜做题,留到了今天,终于过了,好开心!!! 这题可以用很多中方法来做,例如bfs,dfs,A*,IDA*什么的。下面是我用普通bfs加上康拓展开来做的代码,800+ms险过的。View Code 1 bool used[N]; 2 char elem[10] = "12345678x"; 3 const char *end = "12345678x"; 4 5 int fac[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 36 阅读全文
摘要:
记录一下我一直很怕做的一道离散化题。都卡了大半个月了,今天终于过了。这种离散化的题就一个恶心,不然早就啃过去了。代码如下:View Code 1 /* 2 ID: lyon.ly1 3 LANG: C++ 4 TASK: rect1 5 */ 6 7 #include <cstring> 8 #include <iomanip> 9 #include <cmath> 10 #include <cstdio> 11 #include <iostream> 12 #include <algorithm> 13 #include 阅读全文
摘要:
http://poj.org/problem?id=1062 网上都说是dij,可是我想不到怎么dij。。。- -所以就只好暴力dfs+剪枝来做这题了。实践过,也就47ms,不会太长时间。这题注意的是,最高等级和最低等级的差不超过给定的值的判断。暴力搜索加上剪枝,剪枝的方法只需(1)跟目前找到的最小价格比较,判断是否继续找下去(2)判断是否曾经搜索了。通过代码:View Code 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <iomanip> 5 # 阅读全文
摘要:
http://poj.org/problem?id=1011 回归基础,搞一下DFS+剪枝的题。 这题的代码打了两次,测了好多组数据才得到AC的代码。两次的代码都是因为返回的时候没有及时将used标记更新,而导致不停的WA。可是第一个代码写的太乱了,debug 漫天飞,于是就决定重新写了一遍。第二次打的时候思路清晰的许多,最后得到下面AC代码~View Code 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <iomanip> 5 #include & 阅读全文
摘要:
数据结构的期末作业是关于平衡二叉排序树的综合性实验,其中需要完成的功能有:(1)插入新结点(2)前序、中序、后序遍历二叉树(递归)(3)前序、中序、后序遍历的非递归算法(4)层次遍历二叉树(5)在二叉树中查找给定关键字(函数返回值为成功1,失败0)(6)交换各结点的左右子树(7)求二叉树的深度(8)叶子结点数(9)删除某结点 搞了两三天,上面的功能都实现了。而且我弄的是模板,兼容性也就相对强了一些。 其实这对我只是一个锻炼而已,目测代码方面还有很多的地方可以改进,欢迎读者提出或指正。 弄这个的时候发现一个比较矛盾的地方,就是其中会有树交换子树的操作。交换后,原来升序将会变成降序,反之... 阅读全文
摘要:
成都一赛就此结束,这次的区域赛我们队伍暴露出一些相当大的毛病,以致于拿个铜牌也心惊胆战状。先说说试机的时候。其实试机,也就是热身赛,个人认为也是应该好好对待的。当时我们试机的时候,看到的三题都是水题,于是就计划一人做一题。我负责A(一道所有串两两拼接以后,判断有多少个新串是包含两个相同的长度为2的子串的问题),ly负责C(一道判断有多少个不同的小写字母的问题),hq负责B(一道计算平均有多少重复的子串的问题),不过最后是我打的B题。热身赛还没开始,所有人都打开了题目看了。于是真正开始的时候,排名第一的队伍直接以0罚时的速度ak了所有题。而我们,就是打算做完所有的一次性交上去。在大概开始了10分 阅读全文