07 2013 档案

摘要:个人赛连秃两场了。。。不过今天见识到了Python的威力。。。还是有点欣慰的。。。Python:a=1Ln=input()for i in range(1,n+1): b=a+1 a*=b print bVSC++:/************************************************************************* > File Name: A.cpp > Author: Chierush > Mail: qinxiaojie1@gmail.com > Created Time: 2013年07月31日... 阅读全文
posted @ 2013-07-31 13:03 Chierush 阅读(254) 评论(0) 推荐(0)
摘要:题意比较简单,状态转移方程也比较容易得出:f[i]=max{ f [ j ] }+p[i],(j的结束时间在i开始时间之前)若i开始之前没有结束的j,则f[i]=p[i];因数据量太大(n File Name: A.cpp > Author: Chierush > Mail: qinxiaojie1@gmail.com > Created Time: 2013年07月26日 星期五 10时52分21秒 ************************************************************************/#include #incl. 阅读全文
posted @ 2013-07-27 13:13 Chierush 阅读(763) 评论(0) 推荐(0)
摘要:以为很水的一道题,花了大半天的时间才搞定,比赛的时候卡在这题上了,伤不起啊。。。题意:给一棵树,每个结点中有礼物,每个礼物有一个权值,某些结点中会有陷阱,你可以从任何一点出发,每个结点最多只能经过一次,最多掉进陷阱C次,求出可获得的礼物的最大值。思路:典型的树形DP ,状态可用dp[x][y][z]来表示,x代表以x为根结点的子树,y代表恰好经过了几个陷阱,z代表方向(0,1),表示从此子树进来或是出去。dp[x][y][0]的含义是从子树x中出来,恰好经过y个陷阱所能获得的最大礼物值,dp[x][y][1]的含义是进入子树x,恰好经过y个陷阱所能获得的最大礼物值。状态转移方程:如果结点x有. 阅读全文
posted @ 2013-07-26 19:56 Chierush 阅读(1027) 评论(1) 推荐(0)
摘要:题意:1~n的一个排列,两两互换,每个位置每天只能做一次交换,问最多几天能交换成1~n,并且输出交换步骤。解法:把该置换中所有的循环节找出,各循环节之间的交换是并行的,两两不相关,每天只需在循环节内部交换。 若循环节长度为1,则无需交换,若循环节长度为2,则只需交换一次,若循环长度>2,则只需要交换2次。 置换方法:每个循环节中的第一个和最后一个交换,第二个和倒数第二个交换... 至于为什么只需两次,可以在纸上模拟一下置换过程,按上述置换方法一次交换后,一个循环节变成了(n-1)/2个长度为2的循环节,可以一次并行交换。代码如下:/**************************** 阅读全文
posted @ 2013-07-24 14:39 Chierush 阅读(565) 评论(0) 推荐(0)