蜥蜴與地下室

2021-08-07 08:38:54 字數 1191 閱讀 8618

###蜥蜴與地下室

哈利喜歡玩角色扮演的電腦遊戲《蜥蜴和地下室》。此時,他正在扮演乙個魔術師。在最後一關,他必須和一排的弓箭手戰鬥。他唯一能消滅他們的辦法是乙個火球咒語。如果哈利用他的火球咒語攻擊第i個弓箭手(他們從左到右標記),這個弓箭手會失去a點生命值。同時,這個咒語使與第i個弓箭手左右相鄰的弓箭手(如果存在)分別失去b(1 ≤ b < a ≤ 10)點生命值。

因為兩個端點的弓箭手(即標記為1和n的弓箭手)與你相隔較遠,所以火球不能直接攻擊他們。但是哈利能用他的火球攻擊其他任何弓箭手。

每個弓箭手的生命值都已知。當乙個弓箭手的生命值小於0時,這個弓箭手會死亡。請求出哈利殺死所有的敵人所需使用的最少的火球數。

如果弓箭手已經死亡,哈利仍舊可以將他的火球扔向這個弓箭手。

input

第一行包含3個整數 n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10),第二行包含n個整數――h1,h2,…,hn (1 ≤ hi ≤ 15), hi 是第i個弓箭手所擁有的生命力。

output

以一行輸出t――所需要的最少的火球數。

sample input

3 2 1

2 2 2

sample output

3思路:先滅掉第乙個和第 n 個弓箭手,然後 dfs 消滅其他弓箭手。

由位子 pos 向後搜尋的條件是 pos-1 處的弓箭手已死亡。

#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

int hp[11];

void dfs(int pos,int step,int hp)

while(hp[pos-1]>=0 || hp[pos]>=0)

hp[pos-1]-=b;

hp[pos]-=a;

hp[pos+1]-=b;

} int p[11];

for(int i=1; i<=10; i++)

p[i]=hp[i];

dfs(pos+1,step,p);//都小於零時,再進行下乙個搜尋

}int main()

ans=inf;

dfs(2,0,hp);//從第二個開始

printf("%d\n",ans+res);

return 0;

}

1489 蜥蜴和地下室 bfs

題目大意 輸入第一行包含3個整數 n,a,b 第二行輸入n只蜥蜴的生命值,你可以選擇編號為2 n的任意第i只蜥蜴進行火球術,對第i只蜥蜴造成a點傷害,對左右的蜥蜴造成b點傷害,當生命值 0時蜥蜴死亡 巨坑 但可以繼續攻擊,求殺死全部蜥蜴的最小攻擊次數。n和hi的範圍都比較小,考慮dfs。當是純dfs...

dfs 1489 蜥蜴和地下室

1 秒131,072 kb 10 分 2 級題 哈利喜歡玩角色扮演的電腦遊戲 蜥蜴和地下室 此時,他正在扮演乙個魔術師。在最後一關,他必須和一排的弓箭手戰鬥。他唯一能消滅他們的辦法是乙個火球咒語。如果哈利用他的火球咒語攻擊第i個弓箭手 他們從左到右標記 這個弓箭手會失去a點生命值。同時,這個咒語使與...

51Nod 1489 蜥蜴和地下室

1489 蜥蜴和地下室 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 哈利喜歡玩角色扮演的電腦遊戲 蜥蜴和地下室 此時,他正在扮演乙個魔術師。在最後一關,他必須和一排的弓箭手戰鬥。他唯一能消滅他們的辦法是乙個火球咒語。如果哈利用他的火球咒語...