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; }
时间: 2024-10-13 16:13:11