51Nod1489 蜥蜴和地下室(dfs)

2021-09-02 20:15:34 字數 879 閱讀 3678

這道題的思路真的很難想誒。

題解:對於乙個蜥蜴來說,他的血線是需要減去了n個a和m個b。那麼我們可以列舉出每個蜥蜴所有的n和m的可能,記錄最終的結果,找到最小的結果即可。

因為蜥蜴最多才15個,所有這種暴力的方法是可行的,可以用bfs去實現。

先殺死兩端的蜥蜴。遞迴的時候一定要注意,去算第i個蜥蜴時,一定要保證第i-1個蜥蜴是死亡的。這樣才能保證當你遞迴到第i-1個的時候,前面的蜥蜴都是死的。

每個最終的結果可以用優先佇列去維護。

#include#include#include#includeusing namespace std;

int n,a,b;

int h[20];

priority_queue,greater>q;

void dfs(int i,int ans)

int s1,s2;

if(h[i-1]<0)

s1=0;

else

s1=h[i-1]/b+1;

if(h[i]<0)

s2=0;

else

s2=h[i]/a+1;

int s=max(s1,s2);

for(int j=s1;j<=s;j++) }

int main()

{ int i;

cin>>n>>a>>b;

for(i=0;i>h[i];

int ans=0;

if(n==3)

{ ans=(h[0]/b)>(h[2]/b)?(h[0]/b+1):(h[2]/b+1);

h[1]-=a*ans;

if(h[1]>=0)

ans=ans+h[1]/a+1;

cout

51Nod 1489 蜥蜴和地下室

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

51Nod 1489 蜥蜴和地下室

這道題 一開始想的是貪心 但是想歪了 每次打對傷害總體貢獻最大的乙個 因為小資料 所以隨便怎麼搞 然後 wa了幾發 又想到小資料列舉還能有什麼 於是dfs搜尋 這道我想的是列舉搜尋路徑 因為能對當前loc位置產生傷害只能有三個位置loc 1,loc,loc 1 所以在打後面的敵人之前 可以把他前面的...

51nod 1489蜥蜴和地下室

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