背包问题的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;
}
发现自己其实很笨很笨,,,这么简单的问题也用了那么久,哎!
#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;
}
相关文章推荐
- 0-1背包问题动态规划解法
- Charm Bracelet poj 3624 (01) 背包问题 c++
- 贪心算法运用于背包问题(C++实现)
- 关于背包问题的递归解法
- 0-1背包问题与完全背包问题C++实现 动态规划
- c++实现0-1背包问题完整源码续(动态规划+回溯法实现)
- 0-1背包问题(C++)
- 背包问题的几种解法及变形
- 0-1背包问题--动态规划解法
- 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧
- C++回溯法0/1背包问题DKNAP
- 与字符串有关的一些典型问题的C++解法
- 背包问题-四种解法(穷举,递归,二维数组,一维数组)
- 最简单的0-1背包问题c++代码实例及运行结果
- C++ 背包问题
- 调用c++递归库文件解决背包问题
- 0-1背包问题(C++)
- 01背包问题的优化解法
- 【贪心算法】背包问题 C++
- 组合问题的一般C++解法