背包问题

代码一:

//背包问题
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
    double w;
    double p;
    double t;
};

int cmp(const node &a,const node &b){
    return a.t>b.t;
}

int main(){
    vector<node> str;
    double weight,price=0;
    double wei=0;
    node b;
    int n;
    while(cin>>n>>weight){
        for(int i=0;i<n;i++)
        {
            cin>>b.p>>b.w;
            b.t=b.p/b.w;
            str.push_back(b);
        }
        sort(str.begin(),str.end(),cmp);
        vector<node>::iterator it;
//        for(it=str.begin();it!=str.end();it++)  cout<<(*it).p<<" "<<(*it).w<<endl;
        for(it=str.begin();it!=str.end();it++){
        if(wei+(*it).w<=weight) {
            wei+=(*it).w;
            price+=(*it).p;
        }     
        }
        cout<<price<<endl;
    }
}
View Code

测试数据:结果为220

5
50
60 10
100 20
120 30
30 10
40 20
View Code

代码二:结果为240

//背包问题
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
    double w;
    double p;
    double t;
};

int cmp(const node &a,const node &b){
    return a.t>b.t;
}

int main(){
    vector<node> str;
    double weight,price=0;
    double wei=0;
    node b;
    int n;
    while(cin>>n>>weight){
        for(int i=0;i<n;i++)
        {
            cin>>b.p>>b.w;
            b.t=b.p/b.w;
            str.push_back(b);
        }
        sort(str.begin(),str.end(),cmp);
        vector<node>::iterator it;
//        for(it=str.begin();it!=str.end();it++)  cout<<(*it).p<<" "<<(*it).w<<endl;
        for(it=str.begin();it!=str.end();it++){
            if(wei>=weight) break;
        if(wei+(*it).w<=weight) {
            wei+=(*it).w;
            price+=(*it).p;
        }     else {
            price+=(*it).p*(weight-wei)/(*it).w;
            wei=weight;
        }
        }
        cout<<price<<endl;
    }
}
View Code
原文地址:https://www.cnblogs.com/helloworld2019/p/10357538.html