tuki2501

bag.cpp

Nov 3rd, 2021
1,048
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define task "BAG"
  5.  
  6. const int N = 55;
  7. const int M = 105;
  8.  
  9. int w[N], v[N], dp[N][M];
  10.  
  11. void chmax(int &a, int b) {
  12.   if (a < b) a = b;
  13. }
  14.  
  15. signed main() {
  16.   cin.tie(0)->sync_with_stdio(0);
  17.   freopen(task".INP", "r", stdin );
  18.   freopen(task".OUT", "w", stdout);
  19.   int n, m;
  20.   cin >> n >> m;
  21.   for (int i = 1; i <= n; i++) {
  22.     cin >> w[i] >> v[i];
  23.   }
  24.   for (int i = 1; i <= n; i++)
  25.   for (int j = 0; j <= m; j++) {
  26.     dp[i][j] = dp[i - 1][j];
  27.     if (j >= w[i]) chmax(dp[i][j], dp[i - 1][j - w[i]] + v[i]);
  28.   }
  29.   cout << dp[n][m] << '\n';
  30.   // phan truy vet
  31.   int i = n, j = m;
  32.   while (i > 0 && j > 0) {
  33.     if (dp[i][j] == dp[i - 1][j]) i--;
  34.     else {
  35.       cout << i << ' ';
  36.       j -= w[i]; // j -= w[i] xong roi moi i-- neu khong se sai
  37.       i--;
  38.     }
  39.   }
  40.   cout << '\n';
  41.   cout << m - j << '\n';
  42. }
  43.  
Advertisement
Add Comment
Please, Sign In to add comment