#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\Fractional Knapsack\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/