题目描述:
假设我们有n件物品,分别编号为1, 2...n,有一个背包,它能够承载的重量是W。其中编号为i的物品价值为vi,它的重量为wi。现在,我们希望往包里装这些物品,使得包里装的物品价值最大化,那么我们该如何来选择装的东西呢?
#include <iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int a[1001],b[1001];
int vis[1001];
int n,m,maxn=0;
int check(int i1)
{
int k=0,w=0;
for(k=1; k<=i1; k++)
{
if(vis[k]==1)
w+=a[k];
if(w>m)
return 0;
}
return 1;
}
int fact(int i)
{
if(i>n)
{
int sum=0;
for(i=1; i<=n; i++)
{
if(vis[i]==1)
sum+=b[i];
}
if(sum>maxn)
maxn=sum;
return 0;
}
for(int j=0; j<=1; j++)
{
vis[i]=j;
if(check(i))
fact(i+1);
else
return -1;
}
}
int main()
{
// freopen("C:\\Users\\Administrator\\Desktop\\背包问题.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d%d",&a[i],&b[i]);
}
fact(1);
cout<<maxn<<endl;
return 0;
}