#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; }