【PAT甲级】1070 Mooncake (25 分)(贪心水中水)

题意:

输入两个正整数N和M(存疑M是否为整数,N<=1000,M<=500)表示月饼的种数和市场对于月饼的最大需求,接着输入N个正整数表示某种月饼的库存,再输入N个正数表示某种月饼库存全部出手的利润。输出最大利润。

trick:

测试点2可能包含M不为整数的数据。(尽管题面说明M是正整数,可是根据从前PAT甲级题目的经验,有可能不是整数。。。。。)

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 double a[1007];
 5 double b[1007];
 6 pair<double,int>p[1007];
 7 int main(){
 8     int n;
 9     double m;
10     scanf("%d%lf",&n,&m);
11     for(int i=1;i<=n;++i)
12         scanf("%lf",&a[i]);
13     for(int i=1;i<=n;++i)
14         scanf("%lf",&b[i]);
15     for(int i=1;i<=n;++i)
16         p[i].first=b[i]/a[i],p[i].second=i;
17     sort(p+1,p+1+n);
18     double sum=0;
19     double ans=0;
20     for(int i=n;i;--i)
21         if(sum+a[p[i].second]<=m){
22             sum+=a[p[i].second];
23             ans+=b[p[i].second];
24         }
25         else{
26             ans+=(m-sum)*p[i].first;
27             break;
28         }
29     printf("%.2f",ans);
30     return 0;
31 }

 

 

 

posted @ 2019-11-03 17:10  sewage  阅读(181)  评论(0编辑  收藏  举报