[1020]. 月餅 (25)

題目:

[1020]. 月餅 (25)

時間限制 100 ms內存限制 65536 kB代碼長度限制 8000 B判題程序 Standard 作者 CHEN, Yue

月餅是中國人在中秋佳節時吃的一種傳統食品,不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算可以獲得的最大收益是多少。
注意:銷售時允許取出一部分庫存。樣例給出的情形是這樣的:假如我們有3種月餅,其庫存量分別爲18、15、10萬噸,總售價分別爲75、72、45億元。如果市場的最大需求量只有20萬噸,那麼我們最大收益策略應該是賣出全部15萬噸第2種月餅、以及5萬噸第3種月餅,獲得 72 + 45/2 = 94.5(億元)。
輸入格式:
每個輸入包含1個測試用例。每個測試用例先給出一個不超過1000的正整數N表示月餅的種類數、以及不超過500(以萬噸爲單位)的正整數D表示市場最大需求量。隨後一行給出N個正數表示每種月餅的庫存量(以萬噸爲單位);最後一行給出N個正數表示每種月餅的總售價(以億元爲單位)。數字間以空格分隔。
輸出格式:
對每組測試用例,在一行中輸出最大收益,以億元爲單位並精確到小數點後2位。
輸入樣例:
3 20
18 15 10
75 72 45
輸出樣例:
94.50

思路及代碼:

首先剛開始看到這道題的時候就想到了揹包問題,而且他的庫存,總售價,和單價都是相互綁定的所以就想到了用結構體來存儲

#include"iostream"
#include"vector"
#include"algorithm"
#include"cstdio"
using namespace std;
typedef struct mooncake
{
  double stack;
  double sale;
  double unit;
  bool operator<(const mooncake&ob)const//小於號的重寫哦,便於後面用sort的進行排序
  {
    return unit>ob.unit;
  }  
}MC;
int main()
{
  int n,d;
  cin>>n>>d;
  MC s[1000];
  double sum=0;
  int i;
  for(i=0;i<n;i++)
  {
    cin>>s[i].stack ;

  }
  for(i=0;i<n;i++)
  {
    cin>>s[i].sale  ;

  }
  for(i=0;i<n;i++)
  {
    s[i].unit =s[i].sale/s[i].stack ;

  }
  sort(s,s+n);
  for(i=0;i<n;i++)
  {
    if(d-s[i].stack>=0)
    {
      sum+=s[i].sale;
      d-=s[i].stack;
    }
    else
    {
      sum+=d*s[i].unit;//如果需要的量比庫存少,只要把需要的量乘以單價就好啦
      break;
    }
  }
  printf("%.2lf",sum);
  return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章