#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
double fractional_knapsack(vector<int>& val,vector<int>& wt,int    weight)//vectors of values and their respective weights and max weight are   passed as parameter
{
int sz=val.size();
vector<double> ratio(sz); //vector to store ratio of values and weights
for(int i=0;i<sz;i++){
    ratio[i]=double(val[i]/wt[i]);
}
sort(ratio.begin(),ratio.end(),greater());
//reverse(ratio.begin(),ratio.end());
double max=0.0;
int j=0;
while(max<=weight&&j<sz){
        double(weight[j]);
    max=max+(ratio[j]*weight[j]);
}
return max;
}
int main()
{  int max_weight,n;
cin>>n>>max_weight;
vector<int>values;
vector<int>weights;
for(int i=0;i<n;i++){
    cin>>values[i];
}
for(int i=0;i<n;i++){
    cin>>weights[i];
}
double result=fractional_knapsack(values,weights,max_weight);
cout<<"done/n";
cout<<result;
return 0;
}


D:\ COdeBlock Projects \ Frational背包/main.cpp | 12 |错误:'('令牌|之前缺少模板参数

它正在devcpp中编译,但program_name.exe崩溃了

在方法fractional_knapsack(vector<int>& val,vector<int>& wt,int weight)中,为什么我们将vector作为参考传递。

最佳答案

快速查看错误消息,发现问题出在线路上
sort(ratio.begin(),ratio.end(),greater());

我的猜测是你想要
sort(ratio.begin(),ratio.end(),greater<double>());

排序方法需要一个比较器。如果您对doc的了解更多,那么这里有一个如何使用它的示例。

关于c++ - 分数背包中的贪婪算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42536798/

10-11 02:10