Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. std::ifstream f("bete.in");
  6. std::ofstream g("bete.out");
  7.  
  8. int n,capacity,dp[1001][10001];
  9. std::vector<int>wt,sol;
  10.  
  11. void read(){
  12.  
  13.     f >> n >> capacity;
  14.    
  15.     wt.resize(n + 1);
  16.    
  17.     for(int i = 1;i <= n;i++)
  18.         f >> wt[i];
  19.    
  20. }
  21.  
  22. void precalc(){
  23.    
  24.     for(int i = 1;i <= n;i++)
  25.         for(int j = 1;j <= capacity;j++){
  26.            
  27.             if(j < wt[i])
  28.                 dp[i][j] = dp[i - 1][j];
  29.             else
  30.                 dp[i][j] = std::max(dp[i - 1][j],
  31.                                     dp[i - 1][j - wt[i]] + wt[i]);
  32.         }
  33. }
  34.  
  35. int main(){
  36.    
  37.     read();
  38.     precalc();
  39.    
  40.     if(dp[n][capacity] != capacity){
  41.         g << "NU";
  42.     }else{
  43.        
  44.         int res = dp[n][capacity];
  45.         int w = capacity;
  46.        
  47.         for(int i = n;i > 0 && res > 0;i--){
  48.            
  49.             if(dp[i - 1][w] == res)
  50.                 continue;
  51.             else{
  52.                 sol.push_back(i);
  53.                 w = w - wt[i];
  54.                 res = res - wt[i];
  55.             }
  56.         }
  57.        
  58.         g << "DA\n" << sol.size() << '\n';
  59.        
  60.         for(int i = (int)sol.size() - 1;i >= 0;i--)
  61.             g << sol[i] << ' ';
  62.        
  63.     }
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement