有人可以告诉我我做错了什么吗?

时间:2021-07-14 20:29:10

标签: c++ vector greedy dsa

我正在尝试解决分数背包问题

问题:

<块引用>

你有'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

我没有收到错误,输出窗口是空的。

0 个答案:

没有答案