1. 程式人生 > >hdu4310 - Hero - 簡單的貪心

hdu4310 - Hero - 簡單的貪心

double 代碼 opera 對手 bsp 題意 return 應該 lar

2017-08-26 15:25:22

writer:pprp

題意描述:

? 1 VS n對戰,回合制(你打他們一下,需要受到他們所有存活人的
攻擊)
? 你的血量無上限,攻擊力為1
? 對手血量及攻擊力給定
? 消滅所有敵人掉最少的血量
? n ≤ 20

貪心的去做,應該優先解決那些攻擊力高血量低的敵人,所以應該按照 攻擊力/血量 降序排列然後處理就好了

代碼如下:

/*
@theme:hdu 4310
@writer:pprp
@declare:簡單的貪心算法 將攻擊力/血量最高的敵人先進攻下來就行了
@date:2017/8/26
*/
#include <bits/stdc++.h>

using namespace
std; class enemy { public: double dps; double hp; } emy[1010]; struct cmp { bool operator()(const enemy& a, const enemy&b) { return a.dps/a.hp > b.dps/b.hp; } }; int main() { int n; while(cin >> n && n >= 1 && n <= 20) {
double ans = 0; double sum_dps = 0; for(int i = 0 ; i < n ; i++) { cin >> emy[i].dps >> emy[i].hp; sum_dps += emy[i].dps; } sort(emy, emy + n,cmp()); // for(int i = 0 ; i < n ;i++) // { // cout << emy[i].dps << " " << emy[i].hp << endl;
// } for(int i = 0 ; i < n ; i++) { if(i == 0) { ans += emy[0].hp * sum_dps; } else { sum_dps -= emy[i-1].dps; ans += emy[i].hp * sum_dps; } } cout << ans << endl; } return 0; }

hdu4310 - Hero - 簡單的貪心