恶魔城
Total Submit:230 Accepted:42
Description
上帝需要创造一位战士去消灭撒旦,这位战士必须要穿过恶魔城才能与撒旦决斗。恶魔城内有M条连接N个路口(从1到N编号)的街道,每一条街道都是单向的(也就是说你不能逆着该街道指定的方向走),并且在城内无论怎么走都不可能走回原来走过的地方。开始的时候,战士的生命力(HP)为INITHP、站在1号路口,而撒旦在第N号路口等待着他。每一条街道上都有许多魔鬼,但是也有一些街道已经被上帝派去的天使占领了。当战士经过连接i号向j号路口的街道时,如果占领该街道的是恶魔,那么他的HP先加倍然后减少L[i,j],我们记为A[i,j]=-L[i,j];如果占领该街道的是天使,那么他的HP就会先加倍然后增加L[i,j],我们记为A[i,j]=+L[i,j];如果该街道不存在,那么A[i,j]=0。如果某一时刻战士的HP<=0,那么他会死亡。因为这个战士将非常无敌,当他见到撒旦的时候只要还活着,就能一口气把撒旦消灭,所以上帝不希望让他的INITHP过高。
你的任务:给定N,A[1..N,1..N],求最小的INITHP,使这个战士能够活着见到撒旦。
Input
文件第一行有一个正整数N(3 ≤ N ≤ 100),下面跟着的第i行第j个数为A[i,j](绝对值不超过10000的整数)。
Output
输出所求最小的INITHP。
Sample Input
4
0 -4 0 -10
0 0 +3 0
0 0 0 -14
0 0 0 0
Sample Output
4
Source
wwm
分析:上手比较难。主要问题这种有关图的、最短路径类的题目做的太少。
这道题就是求从a[1][1]到a[n][n]保证HP>0始终成立的初始HP的最小值。另外加入了HP变化的规则。其实就是 HP = HP*2 + a[v][i];
重点是一句话:绝对值不超过10000的整数。即a[][]若路上某一个元素>10000,则到a[n][n]时,HP肯定大于0。
代码运用了DFS搜索+二分查找。因为不用二分查找的话,Test 6 WA,原因未知。
DFS搜索提供二分查找的判断(判断flag是否为true)。