main.cc 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. int energy;
  9. bool eaten[N];
  10. int energy_left(int sec, int e) {
  11. int left = 0;
  12. for (int i = 0; i < n; i++) {
  13. if (eaten[i]) continue;
  14. if (li[i] * sec < ei[i]) left += ei[i] - li[i] * sec;
  15. }
  16. return left;
  17. }
  18. void dfs(int i, int sec, int e) {
  19. int left = energy_left(sec, e);
  20. if (left + e < energy) return;
  21. eaten[i] = true;
  22. if (li[i] * sec < ei[i]) {
  23. e += ei[i] - li[i] * sec;
  24. energy = max(energy, e);
  25. }
  26. for (int j = 0; j < n; j++) {
  27. if (eaten[j]) continue;
  28. dfs(j, sec + si[i], e);
  29. }
  30. eaten[i] = false;
  31. }
  32. int main() {
  33. int T;
  34. scanf("%d", &T);
  35. for (int t = 1; t <= T; t++) {
  36. scanf("%d", &n);
  37. for (int i = 0; i < n; i++) scanf("%d %d %d", &si[i], &ei[i], &li[i]);
  38. memset(eaten, 0, sizeof(eaten));
  39. energy = 0;
  40. for (int i = 0; i < n; i++) dfs(i, 0, 0);
  41. printf("Case #%d: %d\n", t, energy);
  42. }
  43. return 0;
  44. }