您的位置:首页 > 编程语言 > C语言/C++

背包问题的c++解法

2008-02-28 10:47 204 查看
其实说是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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: