1489 蜥蜴和地下室
codeforces
基準時間限制:1
秒 空間限制:131072
kb 分值:
10難度:2級演算法題
哈利喜歡玩角色扮演的電腦遊戲《蜥蜴和地下室》。此時,他正在扮演乙個魔術師。在最後一關,他必須和一排的弓箭手戰鬥。他唯一能消滅他們的辦法是乙個火球咒語。如果哈利用他的火球咒語攻擊第i個弓箭手(他們從左到右標記),這個弓箭手會失去a點生命值。同時,這個咒語使與第i個弓箭手左右相鄰的弓箭手(如果存在)分別失去b(1 ≤ b < a ≤ 10)點生命值。
因為兩個端點的弓箭手(即標記為1和n的弓箭手)與你相隔較遠,所以火球不能直接攻擊他們。但是哈利能用他的火球攻擊其他任何弓箭手。
每個弓箭手的生命值都已知。當乙個弓箭手的生命值小於0時,這個弓箭手會死亡。請求出哈利殺死所有的敵人所需使用的最少的火球數。
如果弓箭手已經死亡,哈利仍舊可以將他的火球扔向這個弓箭手。
input
第一行包含3個整數 n, a, b (3 ≤ n ≤ 10; 1 ≤ b outputinput示例以一行輸出t——所需要的最少的火球數。
3 2 1output示例2 2 2
3
system message
(題目提供者)
思路:每次從第乙個血量大於等於0的弓箭手開始,在dfs之前先把頭和尾打爆,並且盡量不直接打爆
,只有這樣才能保證用的火球術最少,剩下直接dfs了。n很小,所以可以無腦暴力,
**裡的注釋寫的很清楚,所以這裡不再過多解釋。。(網上有dp解法,只怪我太弱,不會用)
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define maxn 105
#define inf 0xfffffff
typedef long long ll;
ll s[maxn],n,a,b,ans=inf,sum;
void dfs(ll x,ll num)//x表示當前弓箭手,num表示當前釋放火球術的次數
if(s[x-1]<0)
dfs(x+1,num);
ll t=0;
if(s[x-1]>=0)
ll t1=s[x]/a+1;
if(s[x]>=0 && t1>t)//假如打爆x-1後x還活著,則說明x的血量大於x-1,
//因此要打爆x,此時打爆x有兩種方法,就是直接打爆和通過
//打爆x+1來打爆x
}return ;
}int main()
dfs(2,0);
if(ans==inf)ans=0;
printf("%lld\n",sum+ans);
}
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級演算法題 哈利喜歡玩角色扮演的電腦遊戲 蜥蜴和地下室 此時,他正在扮演乙個魔術師。在最後一關,他必須和一排的弓箭手戰鬥。他唯一能消滅他們的辦法是乙個火球咒語。如果哈利用他的火球咒語...