题目链接:
题目要求:
一人打怪,生命值无限,每招伤害值为1,有n个怪,每个怪每招伤害值k,生命值m,只要怪没死就一直攻击。
思路:
贪心先把生命值最少,伤害值最高的打到,发现两个值变化趋势一样,则相除越小的越应早除掉,则排下列,一个一个打就好。
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct bay
{
int t;
int l;
}ma[30];
bool cmp(bay a,bay b)
{
return a.t*b.l<b.t*a.l;
}
int main()
{
int n,m,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d %d",&ma[i].l,&ma[i].t);
}
sort(ma,ma+n,cmp);
__int64 sum=0;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
sum+=ma[i].t*ma[j].l;
}
}
printf("%I64d\n",sum);
}
return 0;
}