Guest User

Untitled

a guest
Nov 20th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. "use strict";
  2.  
  3. process.stdin.resume();
  4. process.stdin.setEncoding("utf-8");
  5.  
  6. let inputString = "";
  7. let currentLine = 0;
  8.  
  9. process.stdin.on("data", inputStdin => {
  10. inputString += inputStdin;
  11. });
  12.  
  13. process.stdin.on("end", _ => {
  14. inputString = inputString
  15. .replace(/\s*$/, "")
  16. .split("\n")
  17. .map(str => str.replace(/\s*$/, ""));
  18.  
  19. main();
  20. });
  21.  
  22. function readLine() {
  23. return inputString[currentLine++];
  24. }
  25.  
  26. function main() {
  27. // number
  28. const n = parseInt(readLine());
  29. // weight1,value1 weight2,value2 ...
  30. const wv = readLine()
  31. .split(" ")
  32. .map(pair => pair.split(",").map(Number));
  33. // expected weight
  34. const w = parseInt(readLine());
  35.  
  36. /* O(nw)
  37. let dp = Array.apply(null, Array(n + 1)).map(() => Array(w + 1).fill(0));
  38. for (let i = n - 1; i >= 0; i--) {
  39. for (let j = 0; j <= w; j++) {
  40. if (j < wv[i][0]) {
  41. dp[i][j] = dp[i + 1][j];
  42. } else {
  43. dp[i][j] = Math.max(dp[i + 1][j], dp[i + 1][j - wv[i][0]] + wv[i][1]);
  44. }
  45. }
  46. }
  47. console.log(dp[0][w]);
  48. */
  49.  
  50. // minimum weight to value
  51. // O(n ∑i vi)
  52. const MAX_N = 100;
  53. const MAX_V = 100;
  54. let dp = Array.apply(null, Array(MAX_N + 1)).map(() =>
  55. Array(MAX_V + 1).fill(Infinity)
  56. );
  57. dp[0][0] = 0;
  58. for (let i = 0; i < n; i++) {
  59. for (let j = 0; j <= MAX_N * MAX_V; j++) {
  60. if (j < wv[i][1]) {
  61. dp[i + 1][j] = dp[i][j];
  62. } else {
  63. dp[i + 1][j] = Math.min(dp[i][j], dp[i][j - wv[i][1]] + wv[i][0]);
  64. }
  65. }
  66. }
  67.  
  68. let res = 0;
  69. for (let i = 0; i <= MAX_N * MAX_V; i++) if (dp[n][i] <= w) res = i;
  70.  
  71. console.log(res);
  72. }
Add Comment
Please, Sign In to add comment