
题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序。
思路:工作和工作之间排序,如果a.value*b.day>b.value*a.day a工作应该排在前面
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1010
struct node{
int day;
int value;
int id;
}joy[N];
bool cmp(node a,node b){
return a.value*b.day>b.value*a.day;
}
int main(int argc, char** argv) {
int cas,i,n;
scanf("%d",&cas);
while(cas--){
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%d",&joy[i].day,&joy[i].value);
joy[i].id=i+1;
}
sort(joy,joy+n,cmp);
for(i=0;i<n-1;i++)
printf("%d ",joy[i].id);
printf("%d\n",joy[i].id);
if(cas)
printf("\n");
}
return 0;
}