发现自己其实很笨很笨,,,这么简单的问题也用了那么久,哎!
#include
<
iostream
>
#include < string >
using namespace std;
// 0-1背包问题:
// 输入m, n 两个整数,从1
n任取几个整数,使其和等于 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 两个整数,从1
![](https://www.cnblogs.com/Images/dot.gif)
// 关键:同一个数不能出现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 ;
}