zoukankan      html  css  js  c++  java
  • 贪心算法之背包问题

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int M=1000005;
    struct three{
        double w;//每个宝物的重量
        double v;//每个宝物的价值
        double p;;//性价比
    }s[M];
    
    bool cmp(three a, three b)
    {
        return a.p>b.p;//根据宝物的单位价值从大到小排序
    }
    
    int main()
    {
        int n;//n 表示有n个宝物
        double m;//m 表示毛驴的承载能力
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>s[i].w>>s[i].v;
            s[i].p=s[i].w/s[i].w;//每个宝物单位价值
        }
        sort(s,s+n,cmp);
        double sum =0.0;// sum 表示贪心记录运走宝物的价值之和
        for(int i=0;i<n;i++)//按照排好的顺序贪心
        {
            if(m>s[i].w)//如果宝物的重量小于毛驴剩下的承载能力
            {
                m-=s[i].w;
                sum+=s[i].v;
            }
            else{//如果宝物的重量大于毛驴剩下的承载能力
                sum+=m*s[i].p;
                break;
            }
        }
        cout<<sum<<endl;//输出装入宝物的最大价值
        return 0;
    }
    无欲则刚 关心则乱
  • 相关阅读:
    CentOS7修改计算机名!
    kafka原理和实践
    sip协议详解
    MP4视频测试URL地址,亲测有效
    pkill精确匹配进程名称
    gdb break 断点设置
    ZR#996
    CF1217C
    CF1217B
    CF1217A
  • 原文地址:https://www.cnblogs.com/xjyxp/p/11140832.html
Copyright © 2011-2022 走看看