题目描述
一天,晨晨发现自己的n(2≤n≤100)只兔子跑到自己的花园里面,它们在尽情的吃着她的宝贝花卉。晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。而送每只兔子回去的时间都不同,例如送第i只兔子回去需要ti(1≤ti≤100)单位时间,那么晨晨送第i只兔子来回共需要花费2*ti单位时间,另外每一只兔子单位时间的破坏力都不同,例如第i只兔子单位时间内破坏di (1≤di≤100)朵花。
现在的问题是,晨晨如何安排送这n只兔子回笼子才能使这些兔子的破坏最小。
输入
第一行:一个整数n(1≤n≤100);
接着有n行,每行两个空格分开的整数ti di,分别代表第i只兔子的送回去的时间,和单位时间破坏力。
输出
一行:一个整数,代表这些兔子破坏多少花卉。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
struct node{
double time;
double destory;
double flag;
}a[105];
int cmp(node x,node y){
return x.flag<y.flag;
}
int main()
{
int n;
double sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].time,&a[i].destory);
a[i].flag=a[i].time/a[i].destory;
}
sort(a,a+n,cmp);
// for(int i=0;i<n;i++)
// cout<<a[i].destory<<" "<<a[i].time<<endl;
for(int i=0;i<(n-1);i++)
{
for(int j=i+1;j<n;j++)
sum+=(2*a[i].time*a[j].destory);
}
printf("%.0lf",sum);
return 0;
}