topcoder SRM588 DIV1 解题报告

250':GUMIAndSongsDiv1
题意:A喜欢唱歌,现有n首歌,每首歌有时长Di和音调Ti两个参数,A唱完一首歌i后唱另一首歌j时,中间要休息|Di - Dj|的单位时间。问T时间内A最多唱多少首歌。
分析:对于选定的歌单,按Ti的升序或降序的顺序来唱一定是用时最少的,所以把歌曲按Ti排序再DP即可。


450':KeyDungeonDiv1
题意:有n(1~12)个门,每个门要用一定数量的红钥匙和绿钥匙来开(或者可以用白钥匙替代),每个门只能打开一次,打开后能提供一定量的红绿白钥匙,起始时有三种颜色的钥匙若干,问,手头最多能有多少把钥匙。
分析:对于所有的门有2^n个状态,如果某个状态是合法的,即能通过一定步骤打开一定的门,那么其三种颜色的钥匙的数量总数是一定的,这与开门顺序无关。然而考虑到白钥匙能开两种门,我们应尽量选择使得白钥匙更多的开门顺序。这样我们可以写个优先队列的dij,队列以状态下的白钥匙个数为排序的关键字。


1100':GameInDarknessDiv1
题意:给出一个树(节点数最坏情况在1000左右),现Alice和Bob在树中的两个不同的节点上,现Alice和Bob轮流在树上一步一步的移动(不能停在原地),移动过程中,Alice不知道Bob的具体位置(起始位置还是知道的),但Bob知道Alice的走法(两人采取最优策略,故Alice的走法其实已固定),问Alice能不能在1000000步数以内有完全的把握找到Bob。

分析:可以画图证明,如果Alice在找Bob的过程中如果要经过一个三路(四路的也行啊,就不细说了)岔口,且这三条路的长度都不小于3,那么Alice将永远找不到Bob,反之Alice可以找到。另外,假设刚开始两人距离为D,Alice刚开始至少会直奔Bob的位置而去,大概在D/2多一点点的位置(稍微推算一下,假设是P好了),Alice到了P以后就必须进行地毯式搜索了。所以整个图以P为界,在有B的那一边出现那个三路岔口Alice就永远找不到Bob了。至于题目中的1000000的步数限制,是节点数的平方以上,已经很大了,所以没有三叉口时,Alice找到Bob的步数肯定不会超过1000000,事实上不超过两倍的节点数。所以只要树DP来找三岔口就行了。


本人代码写得有点龊,就不贴了。

你可能感兴趣的:(topcoder SRM588 DIV1 解题报告)