• 贪心算法训练(一)——部分背包问题


    • 问题描述

      • 有一个背包,背包容量是 M =150,有 7 个物品,物品可以分割成任意大小,要求尽可能让装入背包中的物品总价值最大,但不能超过总容量

        物品 A B C D E F G
        重量 35 30 60 50 40 10 25
        价值 10 40 30 50 35 40 30
    • 问题分析

      • 选择性价比最高的,即算出单位价值,并按从大到小排序,依次放入背包,超重就不放,没超就继续放入,直到判断完所有物品
    • 代码

    
        #include <iostream>
        
        using namespace std;
        
        void deal(double *value,double *weight,int n);
        void sort(double *value,int n);
        
        int main()
        {
            char name[7] = {'A','B','C','D','E','F','G'};
            double W;
            cin>>W;
            int n;
            cin>>n;
            double value[n],weight[n];
            for(int i = 0;i<n ;i++)
                cin>>value[i]>>weight[i];
            deal(value,weight,n);
            sort(value,n);
            int j = 0;
            while(j<n)
            {
                if(W >= weight[j])
                W -= weight[j];
                cout<<name[j]<<" "<<weight[j]<<endl;
                j++;
            }
            return 0;
        }
        
        void deal(double *value,double *weight,int n)
        {
            for(int i = 0;i<n;i++)
                value[i] /= weight[i];
        }
        
        void sort(double *value,int n)
        {
            for(int i = 0;i<n-1;i++)
            {
                for(int j = 0;j<n-i-1;j++)
                {
                    if(value[j]<value[j+1])
                        swap(value[j],value[j+1]);
                }
            }
        }
    
    • 结果
      • 数据
        150
        7
        35 10
        30 40
        60 30
        50 50
        40 35
        10 40
        25 30
  • 相关阅读:
    docker容器安装使用
    hashMap学习
    spark运行方式及其常用参数
    java面试题基础
    大数据面试题
    java面试题
    Java四种线程池
    大数据
    pyspark 日期格式
    CMake error:System Error:No such file or directory CMake error:Could not open file for write in copy operation xxxx.ros_Config.cmake.tmp.
  • 原文地址:https://www.cnblogs.com/NikkiNikita/p/9458496.html
Copyright © 2020-2023  润新知