要做n双鞋子,第 i 双鞋子要做Ti天,每天消耗Si的钱(当前正在做第 i 双鞋子时不耗钱)。求在最少消耗钱的情况下做鞋子的顺序。
对于鞋子a,b来说,如果是a,b顺序,则花费的价钱就是Ta*Sa+Tb*Sb+Ta*Sb;
如果是b,a顺序,则花费的价钱就是Tb*Sb+Ta*Sa+Tb*Sa;
可以发现其实差别就在后面那块。
所以按照S/T进行排序即可。
#include<bits/stdc++.h>
using namespace std;
struct node{
int idx;
double f;
}p[1005];
bool cmp(node a,node b){
if(a.f!=b.f) return a.f>b.f;
else return a.idx<b.idx;
}
int main()
{
int t,n,tim,s;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&tim,&s);
p[i].idx=i+1;
p[i].f=s*1.0/tim;
}
sort(p,p+n,cmp);
for(int i=0;i<n;i++){
if(i) printf(" ");
printf("%d",p[i].idx);
}
printf("\n");
if(t) printf("\n");
}
return 0;
}