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 5007 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個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 多組資料,每組資料的第一行為正整...