Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- using namespace std;
- int main() {
- int S;
- cin >> S;
- int n;
- cin >> n;
- vector<int> value(n);
- for (auto &x : value){
- cin >> x;
- }
- // vector <vector<int>> dp(n+1, vector<int>(S+1));
- vector<int> dp(S+1);
- vector <int> last(S+1, -1);
- dp[0] = 1;
- last[0] = 0;
- for (int j = 1; j <= n; j++){
- int index = j-1;
- for (int i = S - value[index]; i >= 0; i--){
- if (dp[i] > 0){
- dp[i + value[index]] += dp[i];
- if (last[i+value[index]] == -1) {
- last[i+value[index]] = index;}
- }
- }
- // cout << dp[j][100] << " " << dp[j][210] << " " << dp[j][270] << " " << dp[j][280] << "\n";
- }
- if (dp[S] == 1){
- vector <int> include;
- int j = S;
- // int next = last[j];
- while (j != 0){
- include.push_back(last[j]);
- // next = last[next];
- j -= value[last[j]];
- }
- for (auto x : include){
- value[x] = -1;
- }
- for (int i = 0; i < n; i++){
- if (value[i] != -1){
- cout << i+1 << " ";
- }
- }
- }
- else if (dp[S] == 0){
- cout << 0;
- }
- else{
- cout << -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement