K-Hero

题目连接 http://acm.hust.edu.cn/vjudge/contest/121192#problem/K

题目要求求损失的HP值的最小值,运用贪心算法寻求最优条件,根据题意可知要先杀死HP值小的,同时DPS值大的,所以最优条件是先

杀死(HP/DPS)小的。因为每一个敌人都有两个数据,所以可以用结构体,此外因为需要比较(HP/DPS)的值,结构体中还可以增加一个数据

com(要用到除法时一定要考虑是不是double型)。在定义一个比较com大小的函数,就可以直接用sort函数排序。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct date
{
    double HP,DFS;
    double comp;
}date ;
int com(date x,date y)
{
    return x.comp>y.comp;//按降序排列的
}
int main()
{
    int n;
    date a[50];
    while(cin>>n&&n)
    {
        int i,sum=0;
        double alldfs=0,afterdfs=0;
        for(i=0;i<n;i++)
        {
            cin>>a[i].HP>>a[i].DFS;
            a[i].comp=a[i].HP/a[i].DFS;
            alldfs+=a[i].DFS;
        }
        sort(a,a+n,com);
        for(i=0;i<n;i++)
        {
            sum=(alldfs-afterdfs)*a[i].HP;
            afterdfs+=a[i].DFS;

        }
        cout<<sum<<endl;
    }
    return 0 ;
}

 

posted @ 2016-07-24 17:24  Twsc  阅读(209)  评论(0编辑  收藏  举报