我正在尝试解决分数背包问题
问题:
<块引用>你有'n'件物品,每件物品的{value, weight},背包的容量是'w'。你需要把这些物品放在背包里,这样背包里物品的最终价值是最大的。< /p>
我的解决方案:-
#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
using namespace std;
bool compare(pair<int,int>p1,pair<int,int>p2){
double vw1 = (double) p1.first/p1.second;
double vw2 = (double) p2.first/p2.second;
return vw1 > vw2;
}
int main(){
int n;
cin>>n;
vector<pair<int,int>>item;
for(int i=0; i<n; i++){
cin>>item[i].first>>item[i].second;
}
int w; //knapsack weight (capacity)
cin>>w;
//sorting items in decreasing order according to value/weight
sort(item.begin(),item.end(),compare);
int ans = 0;
for(int i=0; i<n; i++){
if(w >= item[i].second){
ans += item[i].first;
w -= item[i].second;
continue;
}
double vw = (double) item[i].first/item[i].second;
ans += vw * w;
w = 0;
break;
}
cout<<ans;
return 0;
}
我正在尝试的输入: input
我没有收到错误,输出窗口是空的。