C语言实现背包问题,高手进来补填

来源:百度知道 编辑:UC知道 时间:2024/06/24 09:04:19
背包问题 从N件不同价值、不同重量的物品中选取一部分,在不超过规定重量的原则下,是该部分价值最大。
设n件物品的重量与价值分别为:w1,w2,......wn与p1,p2,......pn,算法采用递归法。
#include<stdio.h>
#define m 30
short int bag[m+1],bag1[m+1];
float p[m+1],total;
int w[m+1],n;

void worth(short intb[m+i])
{ int i;
float x;
x=0;
for(i=1;i<=n;i++)
if(b[i]x+=p[i];
toatl=x;
for(i=1;i<=n;i++)
bag[i]=b[i];
}
void knopsack(int *ti,int i,short intb2[m+1])
{int j,r,k;
int b1[m+1];
for 这个需要你添 {
for(k=0;k<m+1;k++)
b1[k]=b2[k];
r=*ti-w[j];
if 这个需要你添 {
*ti=r
if c{
bi[j]=1;
worth(b1);
}
else{
b1[j]=1
D
*ti=r
}
}
else
if(j==n){
worth(b1);
}
}
}
main()
{int t,i;
scanf("%d",&n);
scanf("%d%f',&w[i],&p[i]);
scanf("%d",&t);
total=0
for(i=0;i<=m;i++)
bag1[i]=0;
这个需要你添
for(i=0;

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
long int m,n,w,p,i,j;
long int x[1001];
cin>>w>>p;
for(i=0;i<=1001;i++)
x[i]=0;
for(i=1;i<=n;i++)
{
cin>>a>>b;
if(m-a>0)
for(j=m-a;j>=0;j--)
if(x[j]+b>x[j+a]) x[j+a]=x[j]+b;
}
cout<<x[m]<<endl;
return 0;
}

#include<stdio.h>
#define m 30
short int bag[m+1],bag1[m+1];
float p[m+1],total;
int w[m+1],n;

void worth(short intb[m+i])
{ int i;
float x;
x=0;
for(i=1;i<=n;i++)
if(b[i]x+=p[i];
toatl=x;
for(i=1;i<=n;i++)
bag[i]=b[i];
}
void knopsack(int *ti,int i,short intb2[m+1])
{int j,r,k;
int b1[m+1];
for 这个需要你添 {
for(k=0;k<m+1;k++)
b1[k]=b2[k];
r=*ti-