c++ - 小数背包中实现的贪心算法

标签 c++ greedy

#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/

相关文章:

cs50 pset1 贪婪。我不必使用%?

C++函数: pass non const argument to const reference parameter

c++ - 具有libev和自定义事件循环的C++ libhiredis

c++ - 我可以在 QDomDocument 中找到所有具有给定属性的 XML 节点吗?

c++ - 如何在c++/c中通过socks代理创建基本的TCP连接?

c++ - 为什么贪婪的方法在这种情况下不起作用?

用于重叠匹配的 C++ 正则表达式

javascript - 使 AngularJS 路由命名组非贪婪

c++ - QString,去掉标签和内容?

algorithm - 使用贪婪耐心排序证明最长递增子序列