我先说一下题意吧:就是对面有很多对手 你每次可以打掉一滴血 然后给你了每个对手的血量 和每回合能攻击多少血 然后让你求出你最少消耗的血量
思路:这道题我最初的思路就是把每个人的攻击力排序 然后依次杀掉攻击力重大到小的对手。
交了一万次啊 还是不对
最后问了大神才知道要用攻击力和血量的比值来排序
你们可以自己在纸上推一下 这里我就不写为什么了
下面看代码
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int hp;
int dps;
double chushu;
}a[1005];
bool cmp(node x,node y)
{
return x.chushu > y.chushu;
}
int main()
{
int sum;
int n,i;
while(~scanf("%d",&n))
{
sum = 0;
for(i = 0;i < n;i++)
{
scanf("%d%d",&a[i].dps,&a[i].hp);
a[i].chushu = (a[i].dps * 1.0) / (a[i].hp * 1.0);
sum = sum + a[i].dps;
}
// printf("%d = sum *\n",sum);
sort(a,a + n,cmp);
long long shanghai = 0;
for(i = 0;i < n;i++)
{
int miaoshu = a[i].hp / 1;
shanghai = shanghai + miaoshu * sum;
sum = sum - a[i].dps;
}
printf("%I64d\n",shanghai);
}
return 0;
}