- 博客(7)
- 资源 (3)
- 收藏
- 关注
原创 UVALive 4725 Airport 【DP】
题目连接 该题的dp状态是dp[i][j] 表示前i时间第一个停机坪有j个飞机飞出时的最大值。由于只有两个停机坪,所以选择的第一个的只确定了,那么第二个也就确定了。 当然,本题还存在飞机不够飞的情况,这个可以提前处理点(0,0 且前面的飞机都飞光了) 仔细想想 虽然麻烦点,但是并非不可解。 #include #include #include using namespace std
2012-10-19 21:30:51 1167
原创 UVALive 4847 Binary Search Tree【树型dp】
题目大意:给定一个1-n的排列,依次将这些数插入到二叉排序树中,问总共有多少个排列使得构成的二叉树和给定的排列构成的二叉树相同 本题的思路就是:先构成要求的二叉排序树,然后再在树上进行dp 状态转移为:dp[rt] = dp[lson]*dp[rson]*c(lson,sum); lson 表示左子树的点的个数,sum表示左右子树点的个数之和。 c(a,b) 表示b中过选择a个的组合数。状
2012-10-19 21:16:29 1070
原创 UVALive 4844 String Popping【记忆化搜索】
题目大意: 给定一个a、b构成的字符串,每次可以消去长度不小于2的连续相同字符,问给定字符能否消成空串。 思路:首先我的思路就是搜索,当然暴搜的话超时。然后我就想着记忆搜索的状态,让状态变少! 我记录的状态时:剩余字母的数量和ab变成01后二进制数值,打包成pair #include #include #include #include #include using namespace
2012-10-19 21:06:02 1226
原创 zoj 3659 Conquer a New Region【并查集】【2012长春现场赛】
最近好多题目都是树型结构,我最开始想到的是树型dp,但是完全没有思路,结题报告给的是并查集,看着解题报告想了好久,才看懂什么意思。 按边排序,从大到小插入,每条边将两个集合连起来,而新加的边是两个集合所有边最小的,那么两个集合中的点交叉的通路最小的边就是新加的,那只要枚举两个集合,a,b是a并入b更优还是b并入a更优就行了。集合内部点已经计算出,相互的只要知道集合中元素的个数就好了。
2012-10-17 10:02:00 873
原创 zoj 3656 Bit Magic【2-sat】【2012 长春现场赛】
题目大意:给定数组b[][],b数组是有下面代码生成的 void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i % 2 == 1 && j % 2 == 1) b[
2012-10-16 21:42:15 670
原创 zoj 3662 Math Magic 【dp】【2012 长春现场赛】
题目大意:问有多少组满足,个数为k个,和为n最小公倍数为m 解题思路:首先我想到这个可能是dp,状态为前i个数组成和为j最小公倍数是k的方案数,但是这个时间复杂度和空间复杂度都很高。最后我的优化是将最小公倍数这个状态改变一下,事实上可以用到的数并不多,最多也就32个,(eg:10: 1 2 5 10)这样的话,我就解决了问题. 但是我写的总是超时,后来分析了很久,原来这个其实最大的一组数据状态
2012-10-16 21:25:10 1065 1
好玩的数学·幻方及其他:娱乐数学经典名题
2012-03-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人