题目: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(贪心)
时间: 2024-11-03 06:01:33