fork download
  1. #include <stdio.h>
  2. #include <algorithm>
  3. using namespace std;
  4. #define MN 505
  5. struct data {
  6. int s, d;
  7. } w[MN];
  8. int n;
  9. inline int fmax(int a,int b) { return a>b?a:b; }
  10. inline bool cmp(data d1, data d2) {
  11. if (d1.d == d2.d) return d1.s > d2.s;
  12. return d1.d < d2.d;
  13. }
  14. int main() {
  15. int runs, sum, M1, M2, t, d, sol;
  16. for (scanf("%d",&runs); runs--; ) {
  17. scanf("%d",&n);
  18. for (int i = 0; i < n; i++) scanf("%d%d",&w[i].s,&w[i].d);
  19. sort(w, w+n, cmp);
  20. sum = M1 = M2 = 0;
  21. for (int i = 0; i < n; i++) {
  22. sum += w[i].s;
  23. t = fmax(sum-w[i].d, 0);
  24. if (t > M1) M2 = M1, M1 = t, d = i;
  25. else if (t > M2) M2 = t, d=i;
  26. }
  27. sol = M1+M2;
  28. for (int i = 0; i < d; i++) {
  29. sum = M1 = M2 = 0;
  30. for (int j = 0; j <= d; j++) {
  31. if (i == j) continue;
  32. sum += w[j].s;
  33. t = fmax(sum-w[j].d, 0);
  34. if (t > M1) M2 = M1, M1 = t;
  35. else if (t > M2) M2 = t;
  36. }
  37. sum += w[i].s;
  38. t = fmax(sum-w[i].d, 0);
  39. if (t > M1) M2 = M1, M1 = t;
  40. else if(t > M2) M2 = t;
  41. if (sol > M1+M2) sol = M1+M2;
  42. }
  43. printf("%d\n",sol);
  44. }
  45. return 0;
  46. }
Runtime error #stdin #stdout 0s 3348KB
stdin
Standard input is empty
stdout
Standard output is empty