摘要: http://codeforces.com/problemset/problem/289/B水题。。。。。睡觉前水一下题意:给一个矩阵和一个值D,矩阵内每个元素可以多次加减D,目的是让整个矩阵的元素都变得相等,如果做不到输出-1想了一下,觉得好像挺水。。。。。首先,矩阵是多余的,直接一个数组就行了,无非是让数组元素都相等对于两数字A,B,如果它们的差值不是D的倍数,那么无论它们怎么加减都没办法变得一样,只要一对数字不行,整个序列就失败了对于两数字A,B,它们的差值是D的倍数,例如kD,那么他们可以变为相等,要变相等的最小次数就是k,变换方式很多,小的变成大的,大的变成小的,两者都往中间值靠拢, 阅读全文
posted @ 2013-05-24 23:18 Titanium 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 状态压缩DP + 优先队列BFS题意:给一个矩阵图,图中只有一个*表示起点,#表示不能到达的点,从A开始有k个大写字母(一定是连续的前k个,但是每个字母的个数不一定),一种大写字母表示一种矿石,一个矿石有两个值ai,bi,表示收集这个矿石需要ai电量,另外,在一个矿石点,可以选择收集或者不收集直接走掉,收集后每走一步,需要多加bi的电量,一开始没有任何矿石,每走一步需要1电量,另外,一开始给你P电量。走的方向是上下左右四个方向。你的任务是在电量用完之前,收集到每种矿石(每种矿石只需要1个),然后回到起点,但是注意一点,在没有收集完之前,不能回到起点,因为一旦回到起点就会瞬间传送回基地。如果有的 阅读全文
posted @ 2013-05-24 21:33 Titanium 阅读(386) 评论(0) 推荐(0) 编辑
摘要: RMQ模板题,用ST算法//DP预处理//dp[i][j] 表示从下标i开始,长度为2^j的最大值//状态转移方程 dp[i][j] = max{ dp[i][j-1] , dp[i+2^(j-1)][j-1] }//也就是一个长度为2^j的区间,二分为两个2^(j-1)的长度//对于查询[a,b]以内的最大值,先求出区间长度LEN = b-a+1//查询结果为 res = max{dp[a][k] , dp[b-2^k+1][k]} , 关键是k,是什么,怎么计算//当满足 2^k >= LEN/2 , 且k最小时,这个k就是我们要的值//k可以用计算公式一步算得 : k = (int 阅读全文
posted @ 2013-05-24 13:47 Titanium 阅读(167) 评论(0) 推荐(1) 编辑
摘要: 强连通分量题意:一个n行m列的矩阵图,上面有3种点,可能是数字x(0<=x<=9),表示这里有多少个矿石,#表示不能走到这点,*表示传送点,对应一个目标点,可以瞬间传送到目标点。你从(0,0)左上角处出发,行走的方向只能是向左或者向下,要求你走到某个地方(不一定是右下角),让你得到的矿石最多。一个地方的矿石只能采集一次,下次再去到那个点是没有矿石的。注意几点,传送点可能将你传送到#这种点,那么相当于这个传送点是多余的等于没用,另外在传送点可以选择传送或者不传送继续走。分析:由于传送点的存在,可能使这个有向图构成环,进而可能产生强连通分量,所以先建图,进行一次强连通分量缩点,为什么缩 阅读全文
posted @ 2013-05-24 09:29 Titanium 阅读(391) 评论(0) 推荐(0) 编辑