N个数求和为K的所有情况
直接上代码,不bb
#include <iostream>
#include <list>
#include <stdio.h>
#include<vector>
using namespace std;
void dp(vector<vector<int>>& rst, vector<int>& tmp, vector<int>& arr, int sum, int N) {
if (N < 0)return;
if (sum == arr[N]) {
tmp.push_back(arr[N]); //必须将arr[N]插入
rst.push_back(tmp);
tmp.pop_back(); //必须将arr[N]删除
}
//放入背包
tmp.push_back(arr[N]);
dp(rst, tmp, arr, sum - arr[N], N - 1);
//不放入背包
tmp.pop_back();
dp(rst, tmp, arr, sum, N - 1);
}
vector<vector<int>> Sum_k(vector<int>& arr, int k) {
vector<vector<int>> rst; //结果
vector<int> tmp; //临时保存
dp(rst, tmp, arr, k, arr.size() - 1);
return rst;
}
int main(){
int value[] = { 2,9,5,7,4,11,10 };
vector<int> arr(value, value + 7);
vector<vector<int>> rst;
int k=20;
rst=Sum_k(arr, k);
for (auto x : rst) {
for (auto y : x) {
cout << y << " ";
}
cout << endl;
}
return 0;
}