问题:给定一个整数K和n个不同大小的商品,第i个物品的大小整数位ki ,寻找一个物品的子集,它们的和正好为为K ,或者确定不存在这样的子集
用动态规划解决问题的时候,求出问题的一个解,而不是所有的解。如果求出所有的解,我目前想到的用回溯法解决,不过要指数之间的复杂度
P(N,K)可以通过判断P(N-1,K)和P(N-1,K-kn)的解来判断,如果这两个子集都无解,则问题没有解。我们不仅要知道P(N,K)中有解的情况,还要知道所有数值a<=K的是否有解
一般的话P(i,j)表示前i物体,大小为j,是否有解
归纳假设:已知如何求解P(n-1,k),其中0<=k<=K
那么P(n,K) 可以通过判断 P(n-1,K) 和P(n-1,K-kn) 来判断。
如果还想知道有解的时候,含有哪些元素 ,要做个标记belong
代码如下
// 背包问题(n个整数和问题).cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#define N 5
#define K 10
typedef struct
{
bool exit;
bool belong;
}NODE ;
int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
int arr[N+1];
cout<<"input the number"<<endl;
for(i=1;i<=N;i++)
{
cin>>arr[i]