Bài toán ba lô 1

View as PDF

Points: 350 Time limit: 2.0s Memory limit: 256M Input: stdin Output: stdout

\(N\) viên bi, được đánh số \(1,2,3,...,N\). Với mỗi \(i(1\le i\le N)\), viên bi thứ \(i\) có khối lượng là \(w_i\) và có giá trị là \(v_i\).

\(Kaninho\) quyết định chọn một số viên bi từ \(N\) viên bi trên và bỏ vào ba lô để đi chơi. Sức chứa của ba lô là \(W\), có nghĩa là tổng khối lượng của các viên bi được chọn phải không được quá \(W\).

Tìm tổng giá trị lớn nhất có thể của các viên bi được chọn để bỏ vào ba lô.

Input

  • Dòng thứ nhất chứa hai số nguyên \(N,W(1\le N\le 100,1\le W\le 10^5)\)

  • \(N\) dòng tiếp theo, mỗi dòng chứa hai số nguyên \(w_i,v_i(1\le w_i\le W,1\le v_i\le 10^9)\)

Output

  • In ra giá trị cần tìm.

Example

Test 1

Input
3 8
3 30
4 50
5 60
Output
90
Note

Giải thích: Viên bi thứ \(1\)\(3\) sẽ được chọn để bỏ vào ba lô. Vì chúng có tổng khối lượng không quá \(8\) và có giá trị lớn nhất là \(90\).


Comments

  • Vodangngoclam 6:02 p.m. 22 jun, 2024 edit 3
    • blinh 2:33 p.m. 21 apr, 2024 edited
      I HATE KNAPSACK 🙁 python
      def printRes(res):
          for i in res:
              print(i)
      n,w=map(int,input().split())
      a,b=[0],[0]
      for i in range(n):
          c,d=map(int,input().split())
          b.append(c)
          a.append(d)
      #print(a,b)
      res=[[0]*(w+1) for i in range(n+1)]
      #printRes(res)
      for i in range(1,n+1):
          for j in range(1,w+1):
              res[i][j]=res[i-1][j]
              if j>=b[i]:
                  res[i][j]=max(res[i-1][j],res[i-1][j-b[i]]+a[i])
      #printRes(res)
      print(res[n][w])