此背包代码显示浮点[float]无效类型错误.可能是什么原因

This knapsack code is showing a float[float] invalid type error. what may be the reason for this?

本文关键字:错误 类型 是什么 无效 显示 代码 背包 float      更新时间:2023-10-16

以下一块背包代码在第32,33行中显示了浮点[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;
    }

问题是因为在第32行,33中,您的下标变量'w'代替'重量'数组。如果您将" 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;
}