题目连接 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 ; }