Advertisement
kolbka_

10E

Dec 3rd, 2021
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. #include <iostream>
  8. #include <string>
  9. #include <vector>
  10. #include <algorithm>
  11.  
  12. using namespace std;
  13.  
  14. int main() {
  15.     int S;
  16.     cin >> S;
  17.     int n;
  18.     cin >> n;
  19.     vector<int> value(n);
  20.     for (auto &x : value){
  21.         cin >> x;
  22.     }
  23. //    vector <vector<int>> dp(n+1, vector<int>(S+1));
  24.     vector<int> dp(S+1);
  25.     vector <int> last(S+1, -1);
  26.     dp[0] = 1;
  27.     last[0] = 0;
  28.     for (int j = 1; j <= n; j++){
  29.         int index = j-1;
  30.         for (int i = S - value[index]; i >= 0; i--){
  31.             if (dp[i] > 0){
  32.                 dp[i + value[index]] += dp[i];
  33.                 if (last[i+value[index]] == -1) {
  34.                 last[i+value[index]] = index;}
  35.             }
  36.         }
  37. //        cout << dp[j][100] << " " << dp[j][210] << " " << dp[j][270] << " " << dp[j][280] << "\n";
  38.     }
  39.     if (dp[S] == 1){
  40.         vector <int> include;
  41.         int j = S;
  42. //        int next = last[j];
  43.         while (j != 0){
  44.             include.push_back(last[j]);
  45. //            next = last[next];
  46.             j -= value[last[j]];
  47.         }
  48.         for (auto x : include){
  49.             value[x] = -1;
  50.         }
  51.         for (int i = 0; i < n; i++){
  52.             if (value[i] != -1){
  53.                 cout << i+1 << " ";
  54.             }
  55.         }
  56.     }
  57.     else if (dp[S] == 0){
  58.         cout << 0;
  59.     }
  60.     else{
  61.         cout << -1;
  62.     }
  63. }
  64.  
  65.  
  66.  
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement