zoukankan      html  css  js  c++  java
  • 背包问题

    代码一:

    //背包问题
    #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
  • 相关阅读:
    生产环境Crontab专业实例
    Linux系统定时任务介绍
    Linux文件属性改变命令chown-chgrp-chattr-lsattr实践
    Linux命令总结
    Linux特殊权限位suid、sgid深度详细及实践
    企业场景-网站目录安全权限深度讲解及umask知识
    shell简介
    Nginx模块及配置虚拟主机
    安装Nginx
    Nginx简介
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10357538.html
Copyright © 2011-2022 走看看