背包问题 递归算法

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:28:41
#include<iostream>
using namespace std;
int n;
const int N=100;
int option[N],cop[N];
struct res{double weight;double value;}a[N];
double lW,tV,maxV;
void find(int i,double tw,double tv)
{
int k;
if(tw+a[i].weight<=lW)
{
cop[i]=1;
if(i<n-1)
find(i+1,tw+a[i].weight,tv);
else
{
for(k=0;k<n;k++)
option[k]=cop[k];
maxV=tv;
}
cop[i]=0;
}
if(tv-a[i].value>maxV)
{
if(i<n-1) find(i+1,tw,tv-a[i].value);
else
{
for(k=0;k<n;k++)
option[k]=cop[k];
maxV=tv-a[i].value;
}
}
}
int main()
{
double w,v;
int i;
cout<<"input n weightmax"<<endl;
cin>>n>>w;
cout<<"input weight"<<endl;
for(i=0;i<n;i++)
cin>>a[i].weight;
cout<<"input value"<<endl;
for(i=0;i<n;i++)
cin>>a

过不了编译的原因是find与某个库函数重名了,改个别的名字就能过了,但程序对不对我没看

格式很重要,你这样不利于检查。第一个IF后的“}”哪里去咯?