fork download
  1. # include <cstdio>
  2. # include <algorithm>
  3. # include <cstring>
  4. # define DEBUG printf
  5. using namespace std;
  6. int Budget, Total, Entry [100], Fun [100], DPTable [101][2501], MaxFun, MinEntry, i, j;
  7. int main()
  8. {
  9. //freopen ("Input.txt", "r", stdin);
  10. //freopen ("Output.txt","w", stdout);
  11. scanf ("%d%d", &Budget, &Total);
  12. while (Budget && Total)
  13. {
  14. for (i = 0; i < Total; i++) scanf ("%d%d", &Entry [i], &Fun [i]);
  15.  
  16. memset (DPTable, -1, sizeof DPTable);
  17. for (i = 0; i <= Total; i++) DPTable [i][0] = 0;
  18. for (i = 0; i <= Budget;i++) DPTable [0][i] = 0;
  19. MaxFun = -1;
  20.  
  21. for (i = 1; i <= Total; i++)
  22. for (j = 1; j <= Budget; j++)
  23. {
  24. DPTable [i][j] = DPTable [i-1][j];
  25. if (j - Entry [i-1] >= 0 && DPTable [i-1][j-Entry[i-1]] != -1)
  26. {
  27. DPTable [i][j] = max (DPTable [i-1][j], DPTable [i-1][j-Entry[i-1]] + Fun [i-1]);
  28. if (DPTable [i][j] > MaxFun || (DPTable [i][j] == MaxFun && j < MinEntry))
  29. {
  30. MaxFun = DPTable [i][j]; MinEntry = j;
  31. }
  32. }
  33. }
  34. printf ("%d %d\n", MinEntry, MaxFun);
  35. scanf ("%d%d", &Budget, &Total);
  36. }
  37. return 0;
  38. }
Success #stdin #stdout 0.01s 3712KB
stdin
50 10
12 3
15 8
16 9
16 6
10 2
21 9
18 4
12 4
17 8
18 9 

50 10
13 8
19 10
16 8
12 9
10 2
12 8
13 5
15 5
11 7
16 2

0 0
stdout
49 26
48 32