码迷,mamicode.com
首页 > 其他好文 > 详细

hdu4310 - Hero - 简单的贪心

时间:2017-08-26 17:06:15      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:bool   code   writer   space   攻击   bsp   return   题意   operator   

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 - 简单的贪心

标签:bool   code   writer   space   攻击   bsp   return   题意   operator   

原文地址:http://www.cnblogs.com/pprp/p/7435444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!