1060 勇者鬥惡龍 bfs, 剪枝

2021-08-15 16:37:34 字數 1075 閱讀 9078

description

有一頭有著n個頭的惡龍,有m名騎士,每名騎士有一把魔劍。每一把魔劍有兩個引數ci和di。如果當前惡龍的頭不小於ci個,則騎士可以使用魔劍砍掉惡龍的恰好ci個頭;如果當前惡龍的頭小於ci個,則騎士無法使用這把魔劍;如果惡龍還沒有死亡(即惡龍的頭的個數大於0),則惡龍會立即長出di個頭;如果惡龍的頭的個數超過l個,則多餘的頭會脫落,並保持在l個;只有砍掉惡龍所有的頭才算是殺死惡龍。 

你的任務就是判斷這m個騎士能否殺死惡龍,如果可以,請輸出最少需要使用魔劍的次數,否則輸出「-1」。 

input

輸入資料的第一行是三個整數n,m,l(1≤n≤500,1≤m≤10,n≤l≤n+500),表示惡龍有n個頭,騎士數目為m,惡龍的頭的數量限制為l。緊接著m行,第i行有兩個整數ci,di(0≤ci,di≤1,000,1≤i≤m),表示第i把魔劍的引數。如果能夠殺死惡龍,則輸出最少需要使用魔劍的次數,否則輸出「-1」。每把魔劍的使用次數是無限的。

output

輸出一行乙個整數b,表示能夠殺死惡龍時最少需要使用魔劍的次數,如果不能殺死惡龍,輸出-1

sample input

20 2 500

7 18 5

sample output

3
思路是:

bfs暴力+剪枝判斷能否殺死。(如果沒砍死加上d[i],已經出現過,就不用加入到佇列裡了)

具體用**解釋比較清晰。

#include #include #include #include using namespace std;

int n, m, l;

int c[1005], d[1005], vis[1005];

struct node

};int bfs() } }

} return -1;

}int main(void)

cout << bfs() << endl;

} return 0;

}

勇者鬥惡龍

一 勇者鬥惡龍 你的王國有一條n個頭的惡龍,你希望顧一些騎士把他殺死 即砍掉所有的頭 村中有m個騎士可以僱傭,乙個能力值位x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有的頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 輸...

勇者鬥惡龍

你的王國裡有一條n個頭的惡龍,你希望僱傭一些騎士把它殺死 砍掉所有的頭 村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍乙個致敬不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 輸入包含多組資料。...

勇者鬥惡龍

有n個頭的惡龍,你希望僱一些騎士把它殺死 即砍掉所有頭 村里有 個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍 乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 多組資料,每組資料的第一行為正整...