上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页
摘要: 题意:给出n2个队伍,pij 表示队伍i能赢队伍j的概率,给出一个n2*n2个概率矩阵,让你求出最后总赢的可能性最大的队伍。思路:除了给出的矩阵里的数为double,这就是一个典型的dp题,不过中间要用到位运算,呃,这个真的好难理解。举个例子来说吧,n = 3 。(1) 1 2 3 4 5 6 7 8 (假设这一轮比赛后,获胜的队伍为 1 , 3 , 5 , 7 )(2) 1 3 5 7 (假设这一轮比赛后获胜的队伍是 1 , 5 )(3) 1 5 (这一轮比赛后获胜的队伍只能是 1 或 5 )所以,要想得出最后获胜的队伍,要比n轮,dp[i][j] 表示第i轮j获胜的概率,则,在第一轮... 阅读全文
posted @ 2012-08-20 21:16 Misty_1 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 题意:p strat end ,表示员工i开始工作的星期,以及被解雇的星期,和在这期间他共加工了p种首饰,下一行是他都加工了哪几种首饰,问你通过这些记录是否能得出加工每种首饰需要多少天。思路:典型的高斯消元,设每种首饰需要的天数为xi,这个的每个记录就是一个方程,所以用高斯消元法解这个方程组就可以了,需要注意的是,他给出的是一个星期中的某一天,但他做了几个星期不知道,a1*x1 + a2 * x2 + .....=( b + 7 * x ) % 7 ;在本题中要注意%7 ,嗯,每个地方都要摸,不能超出7。代码:View Code #include <stdio.h>#include 阅读全文
posted @ 2012-08-20 11:09 Misty_1 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题意:有一串数字,要将它排列成升序,每次可以交换两个数,交换一次的代价为两数之和。要求代价最小。思路:读完题,没有思路,知道是关于polya的,但是也只会最简单的求有多少种染色方法,然后上网搜题解,再然后参考大神的题解,终于明白了,还是要继续学习polya啊,大神的博客:http://www.cnblogs.com/mcflurry/archive/2012/06/21/2557798.html代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <i 阅读全文
posted @ 2012-08-18 20:19 Misty_1 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 关于polya的定义网上可以搜到很多,我所了解的也是从网上搜到的,不过可以介绍几个博客,个人觉得讲的还不错。1、关于polya的定义,http://blog.csdn.net/geniusluzh/article/details/67954122、将这两道题的,http://yzmduncan.iteye.com/blog/1402942如果还不懂得话,推荐看一下吴文虎的《组合数学》里的置换群那一节,对于求循环节很有帮助。1286代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h 阅读全文
posted @ 2012-08-18 19:35 Misty_1 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 题意:将1到N个数全排列,找出最长上升子序列和最长下降子序列中的较小值,并按字典序输出这个排列。思路:其实这题真没什么具体方法,如果你的逻辑思维能力较好的话,可以很轻松想出来,不过我是看了题解才明白的,如果N是一个平方数,例如9, 1 , 2 , 3 , 4 , 5 , 6 , 7 ,8 , 9它的答案是:3 ,2 , 1 , 6 , 5 , 4,9 , 8 ,7 ,即将序列分成sqrt(n) 段,然后每段都倒序,这样最小的值就是3 ,如果不是平方数,可以分两种情况,m = ceil(sqrt(n)) ;一种是(m-1)*m <n ,一种是(m-1)*m >= n 。呃,怎么解释这 阅读全文
posted @ 2012-08-17 16:07 Misty_1 阅读(325) 评论(3) 推荐(0) 编辑
摘要: 题意:给出N*N个矩形,分成n*n个小矩形,然后给出M种颜色,每个小矩形可以涂一种颜色,并且有些小矩形已经涂完颜色,要保证这个大矩形无论是旋转还是反转都要保持不变,问有多少种染色方式。思路:中心对称图形,呃,其实找到有多少个小矩形可以然不同的颜色但又能保持是中心对称图形就基本上解决了这道题,找这些小矩形也很简单,是看了标程给出的公式才想到的,就是每个大矩形的左上角的那些小矩形。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream&g 阅读全文
posted @ 2012-08-17 10:40 Misty_1 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 题意:在M分钟里,每分钟会出现N颗龙珠,每颗龙珠的位置有题目给出,并且取走每个龙珠所消耗的能量也给出,同时在路上消耗的能量石|x1-x2|,如果在每分钟出现的龙珠里取一颗,问消耗能量最小是多少。思路:在比赛的时候就知道要有dp过,不过如果是不加优化的dp会超时的,所以要优化一下。先来推一下dp的状态转移公式。设dp[i][j]表示第i批龙珠中取第j个需要花费的最小体力。dp[i][j] = min{ dp[i-1][k] + abs(pos[i-1][k]-pos[i][j]) } + cost[i][j];如果直接用这个状态转移公式的,时间复杂度是:m*n*n,优化的话,如果每一个状态都看成 阅读全文
posted @ 2012-08-17 10:05 Misty_1 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 无奈了,只是用cout输出了两个回车,结果一个超时,一个竟然只用了100+ms,很无语~~题意:已知矩阵A:2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2已知矩阵B(8位16进制表示)。求A*B得到的新矩阵。思路:呃,这题中的加法是定义为异或运算的,没读题,只是听XH说了一下题意就开始做了,悲剧的是怎么都不对,然后又问了一下XH题意。。。。。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#i... 阅读全文
posted @ 2012-08-15 11:12 Misty_1 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 树形dp,顾名思义,就是在“树”的结构下用动态规划求最值。既然是在“树”形的结构下进行的,那么做这类题的第一步是先建树,然后顺着树的结构进行dp,一般从两个方向进行:1. 根—>叶:不过这种动态规划在实际的问题中运用的不多,也没有比较明显的例题。2. 叶->根:既根的子节点传递有用的信息给根,完后根得出最优解的过程。至于状态转移公式,这要具体题目具体分析。呃,来说说这道题。题意:各处含有N个节点的树,问你最少剪去几个边可以得到一颗包含P个节点的子树。思路:dp[i][j]表示以i为根的子树包含j个节点最少剪去的边,若j为1的话dp[i][1] 就等于i的子节点数,然后就是0-1背包 阅读全文
posted @ 2012-08-13 19:51 Misty_1 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 以前做过一道给定高度,然后给出长度让你求拼凑的方法的题,记得是到递推的题,如果这题不是在dp的训练计划里,我一定会耐心的去推公式的。呃,汗.......好吧,来说说这题吧。题意:给出矩形的长和高,然后让你计算用1*2或2*1的小矩形拼凑这个矩形,共有多少种方法?思路:刚才说了,开始我是想推公式来着,然后看了discuss了的一些讨论,才有了点想法,不过思路不是自己的,就不写了,个人觉得,下面这篇日志里讲的就很详细了~http://blog.csdn.net/wmn_wmn/article/details/7773167不过我觉得这题难的不是思路,而是关于二进制位运算的部分,如果不是很了解位运算 阅读全文
posted @ 2012-08-13 15:09 Misty_1 阅读(167) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页