干掉坏人 | ||||||
| ||||||
Description | ||||||
TwIstOy需要创造一位战士去消灭Rabbit,这位战士必须要穿过Rabbit的同伙城才能与Rabbit决斗。Rabbit的同伙城内有M条连接N个路口(从1到N编号)的街道 | ||||||
Input | ||||||
每组数据的第一行有一个正整数N(3 ≤ N ≤ 4),下面跟着的第i行第j个数为L[i,j](绝对值不超过10000的整数)。 | ||||||
Output | ||||||
输出所求最小的INITHP。 | ||||||
Sample Input | ||||||
4 | ||||||
Sample Output | ||||||
4 | ||||||
Hint | ||||||
一共有两条路从1到4: | ||||||
Source | ||||||
新生练习赛(2013.11.24) |
思路:暴力枚举战士的血量值,从1开始枚举,枚举到最大范围,每一次都进行一次Dfs,判断能否活着走到终点。
1、不要一路走下去直到终点再进行判断,因为在路上的时候可能已经死了,但是再往下走的时候又回到了复活状态。
2、while循环结束之后还要再有一个换行符。
3、样例输入可以忽略,直接用cin/scanf输入即可。
AC代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
using namespace std;
int map[250][250];
int n,ok;
void dfs(int hp,int now)
{
if(now==n-1)
{
ok=1;return ;
}
for(int i=now+1;i<n;i++)
{
if(map[now][i]!=0)
{
if(hp*2+map[now][i]>0)
dfs(hp*2+map[now][i],i);
if(ok==1)return ;
}
}
}
int main()
{
while(cin>>n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>map[i][j];
}
}
ok=0;
for(int i=1;i<=10000;i++)
{
dfs(i,0);
if(ok==1)
{
cout<<i<<endl;
break;
}
}
}
cout<<endl;
}