• 74-贪心-买月饼


                                1454.贪心题-月饼 (10分)

    C时间限制:3000 毫秒 |  C内存限制:3000 Kb
    题目内容:
     现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。
    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。
    
    输入描述
    每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
    
    输出描述
    对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。
    输入样例
    3 20 18 15 10 75 72 45
    
    输出样例
    94.50

     好久没写题了,犯了很低级的错误,二且一直未发现,可怕

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    typedef struct node{
      double w, v;
      double danjia;
    }node;
    node a[1005];
    bool cmp(node x, node y){
      if(x.danjia > y.danjia)
        return 1;
      else
        return 0;
    }
    int main()
    {
      int n, m;
      cin >> n >> m;
       
      for(int i = 0; i < n; i++){
        cin >> a[i].w;
      }
      if(m == 0){
      	cout << 0 <<endl;
      	return 0;
      }
      for(int i = 0; i < n; i++){
        cin >> a[i].v;
        a[i].danjia = a[i].v / a[i].w;
      }
      sort(a, a + n, cmp);
      int k = 0;
      double sum = 0;
      while(m > 0){
        if(m >= a[k].w){
          sum += a[k].v;
          m -= a[k].w;
          k++;
    //      continue;    //这里如果用continue会导致m>所有价格时一直购买,a[]越界,对于为什么没报错,是因为a[]定义的比较大,虽然k>n但是小于1005 
        }
        if(m < a[k].w){
          sum += a[k].danjia * m;
          m = 0;
        }
        if(k >= n){
        	break;
        }
      }
      //cout << sum << endl;
      printf("%.2lf
    ", sum);
      return 0;
    }
    

      

  • 相关阅读:
    面试题
    面试题-基础篇(1)
    Windows定时器学习
    C++中类的多态与虚函数的使用
    Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
    线程同步(互斥锁与信号量的作用与区别)
    控制台程序实现暂停功能
    Linux下gcc编译生成动态链接库*.so文件并调用它
    Linux下安装ActiveMQ CPP
    activemq Linux下的编译
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9448317.html
Copyright © 2020-2023  润新知