hdu4310 - Hero - 簡單的貪心
阿新 • • 發佈:2017-08-26
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 namespacestd; 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 - 簡單的貪心