其实说是c++解法,其实只是用了iostream库而已,方便打印。。。。
发现自己其实很笨很笨,,,这么简单的问题也用了那么久,哎!
发现自己其实很笨很笨,,,这么简单的问题也用了那么久,哎!
#include <iostream>
#include <string>
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)
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<<arr[j] << " ";
cout<<endl;
}
}
}
int main(int argc, char* argv[])
{
int arr[12] = {0};
beibao(13, 12, arr, 0);
return 0;
}
#include <string>
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)
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<<arr[j] << " ";
cout<<endl;
}
}
}
int main(int argc, char* argv[])
{
int arr[12] = {0};
beibao(13, 12, arr, 0);
return 0;
}