这个题是贪心类型的题目,题意说的是你是无敌的(血量无数),攻击力是1(每次打敌人使对方掉1滴血)问,你同时与n(1=<n<=20)敌人对打,杀死所有敌人,掉的最低血量。样例第一个数是n,第二行是敌人的攻击力和血量。
提醒一下,血量和攻击力要用double型,就因为没注意到这点,WA了好几次- -、
这个题是先根据敌方 攻击力/血量 从大到小排序,先打比值大的。下面是代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct per
{
double hp,dps;
double bi;
}p[30];
int cmp(const per &a,const per &b)
{
if (a.hp!=b.hp)
return a.bi>b.bi;
else return a.dps>b.dps;
}
int main()
{
int n;
while (cin>>n)
{
int i,j,shp=0,sdps=0,chp=0,cdps=0,sum=0;
for (i=0;i<n;i++)
{
cin>>p[i].dps>>p[i].hp;
p[i].bi=p[i].dps/p[i].hp;
shp+=p[i].hp;
sdps+=p[i].dps;
}
sort(p,p+n,cmp);
for (i=0;i<n;i++)
{
sum+=(sdps-cdps)*p[i].hp;
cdps+=p[i].dps;
}
cout<<sum<<endl;
}
return 0;
}