main.cc.bak 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. const int N = 100;
  6. const int INF = 1 << 30;
  7. int n, si[N], ei[N], li[N];
  8. bool eaten[N];
  9. int main() {
  10. int T;
  11. scanf("%d", &T);
  12. for (int t = 1; t <= T; t++) {
  13. scanf("%d", &n);
  14. for (int i = 0; i < n; i++) scanf("%d %d %d", &si[i], &ei[i], &li[i]);
  15. memset(eaten, 0, sizeof(eaten));
  16. int energy = 0;
  17. for (int i = 0; i < n; i++) {
  18. int lost = INF, idx = -1;
  19. for (int j = 0; j < n; j++) {
  20. int cur_lost = 0;
  21. if (eaten[j]) continue;
  22. for (int k = 0, s = si[j]; k < n; k++) {
  23. if (k == j || eaten[k]) continue;
  24. if (ei[k] <= s * li[k]) {
  25. cur_lost += ei[k];
  26. } else {
  27. cur_lost += s * li[k];
  28. }
  29. }
  30. if (cur_lost < lost || cur_lost == lost) {
  31. lost = cur_lost;
  32. idx = j;
  33. }
  34. }
  35. if (idx == -1) break;
  36. eaten[idx] = true;
  37. energy += ei[idx];
  38. for (int j = 0, s = si[idx]; j < n; j++) {
  39. if (eaten[j]) continue;
  40. if (ei[j] <= s * li[j]) eaten[j] = true;
  41. ei[j] -= s * li[j];
  42. }
  43. }
  44. printf("Case #%d: %d\n", t, energy);
  45. }
  46. return 0;
  47. }