标签:
题目:10026 - Shoemaker‘s Problem
题目大意:有个鞋匠在同一天接到了一堆的生意。可是他每天只能做一双鞋,给出做每双鞋需要的时间和推辞做鞋的赔偿。问怎样合理的分配才能使得赔偿最小。
解题思路:鞋子编号 要花的时间 需要的赔偿(每天)
1 1 100
2 5 4
这样的两双鞋有两种安排:
做完1再做2 赔偿 1 * 4;
做完2再做1 赔偿 5 * 100;
所以应该将时间/赔偿小的鞋子先做。
代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N = 1005;
struct Shoe {
int i;
int t;
int f;
}s[N];
int cmp (const Shoe &a, const Shoe &b) {return a.t * b.f < b.t * a.f;}
int main () {
int t;
scanf ("%d", &t);
int n;
while (t--) {
scanf ("%d", &n);
for (int i = 0; i < n; i++) {
scanf ("%d%d", &s[i].t, &s[i].f);
s[i].i = i + 1;
}
sort (s, s + n, cmp);
for (int i = 0; i < n; i++) {
if (i == n - 1)
printf ("%d\n", s[i].i);
else
printf ("%d ", s[i].i);
}
if (t)
printf ("\n");
}
return 0;
}uva10026 - Shoemaker's Problem(贪心)
标签:
原文地址:http://blog.csdn.net/u012997373/article/details/38150671