背包问题的c++解法

其实说是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(
1312, arr, 0);
    
return 0;
}
原文地址:https://www.cnblogs.com/yoran/p/1084621.html