#include
#include
using namespace std;
/*
// 0-1背包问题:
// 输入m, n 两个整数,从1n任取几个整数,使其和等于 m的可能有多少种?
// 关键:同一个数不能出现2次
void beibao(int m, int n, int arr[], int num)
{
for (int i = (m > n ? n : m); i > 0; --i)
{
arr[num] = i;
if(m - i > 0) //如果和还大于0
beibao(m - i, i - 1, arr, num + 1);
else if(m - i == 0)
{
arr[num + 1] = i; //把值赋入
// print arr
for (int j = 0; j < num + 1; ++j)
cout<
<< " ";
cout<
}
}
}
int main(int argc, char* argv[])
{
int arr[12] = {0};
beibao(10, 12, arr, 0);
return 0;
}