• C


    Description

    王小二毕业后从事船运规划工作,吉祥号货轮的最大载重量为M吨,有10种货物可以装船。第i种货物有wi吨,总价值是pi。王小二的任务是从10种货物中挑选若干吨上船,在满足货物总重量小于等于M的前提下,运走的货物的价重比最大。

    Input

    输入数据的第一行有一个正整数M(0 < M < 10000),表示所有货物最大载重量。在接下来的10行中,每行有若干个数(中间用空格分开),第i行表示的是第i种货物的货物的总价值pi ,总重量wi。(pi是wi的整数倍,0 < pi , wi < 1000)

    Output

    输出一个整数,表示可以得到的最大价值。

    Sample

    Input

    100
    10 10
    20 10
    30 10
    40 10
    50 10
    60 10
    70 10
    80 10
    90 10
    100 10

    Output

    550

    题解:

    经典贪心问题,货物可以拆,计算货物的价值与重量的比值,选取比值高(价值高)的装船,货物价值与重量是倍数关系,所以用INT即可。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    /**
    *使用结构体来存储货物信息。
    *w货物的重量
    *p货物的价值
    *ave货物的价值与重量之比。
    */
    struct goods{
        int w,p,ave;
    }good[15],t;
    
    /**
    *冒泡排序,按货物的ave进行降序排序。
    */
    void f(){
        int i,j;
        for(i=0;i<9;i++)
        {
            for(j=0;j<9-i;j++){
                if(good[j].ave<good[j+1].ave)
                {
                    t = good[j];
                    good[j] = good[j+1];
                    good[j+1] = t;
                }
            }
        }
    }
    
    int main()
    {
        /**
        *m船可承载的最大重量。
        *sum船最大可以装的货物价值。
        */
        int m;
        int i, sum = 0;
        scanf("%d",&m);
        //一共10件货物,输入货物的重量价值,并且计算ave。
        for(i=0; i<10; i++){
            scanf("%d%d", &good[i].p, &good[i].w);
            good[i].ave = good[i].p / good[i].w;
        }
        f();
        for(i=0; i<10 && m!=0; i++){
            if(m>=good[i].w){
                sum += good[i].p;
                m -= good[i].w;
            }
            else{
                sum += m * good[i].ave;
                m = 0;
            }
        }
        printf("%d
    ",sum);
        return 0;
    }
    
    
  • 相关阅读:
    使用 RemObjects SDK 建立 WebService 应用
    Excel文件读写的.NET开源组件 Koogra Excel BIFF/XLSX Reader Library
    DataSnap 2009 系列之三 (生命周期篇)
    更改SQL Server表所有者的操作方法
    delphi调用cmd的两种方法
    用AndroidX86和VirtualBox打造高性能Android开发环境
    DevExpress 换肤
    Remobjects关于Channel is Busy 错误的解决方法
    关于D7“System.pas not found”错误的解决方法
    40 套漂亮的图标
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/13848228.html
Copyright © 2020-2023  润新知