下面的背包代码在第32,33行显示了float [float]错误。为什么会这样呢?我无法找出原因。任何帮助将是巨大的。
//maximum value of loot
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int maxi(int a , int b)
{
if(a>b) return a;
else return b;
}
int main()
{
int n,W,V=0;
float v,w,j;
vector<int> values;
vector<int> weights;
vector<float> vbyw;
cin>>n>>W;
for(int i = 0 ; i<n; i++)
{
cin>>v>>w;
values.push_back(v);
weights.push_back(w);
vbyw.push_back(float(v/w));
}
sort(vbyw.begin(),vbyw.end());
j = vbyw.size()-1;
while(W>0 && j>0)
{
W = W - maxi(w[j],W);
V = V + maxi(w[j],W)*vbyw[j];
j--;
}
cout<<V;
return 0;
}
答案 0 :(得分:0)
问题是因为在第32、33行中,下标变量'w'代替了'weight'数组。还有一件事,如果您使用'j'进行索引,而不是声明它'int'不浮动。
我不确定您的算法是否会起作用。但是它将立即运行。如果您需要算法方面的帮助,则可以发表评论。
//maximum value of loot
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int maxi(int a , int b)
{
if(a>b) return a;
else return b;
}
int main()
{
int n,W,V=0,j;// line i have changed
float v,w;
vector<int> values;
vector<int> weights;
vector<float> vbyw;
cin>>n>>W;
for(int i = 0 ; i<n; i++)
{
cin>>v>>w;
values.push_back(v);
weights.push_back(w);
vbyw.push_back(float(v/w));
}
sort(vbyw.begin(),vbyw.end());
j = vbyw.size()-1;
while(W>0 && j>0)
{
W = W - maxi(weights[j],W); // line i have changed
V = V + maxi(weights[j],W)*vbyw[j]; // line i have changed
j--;
}
cout<<V;
return 0;
}