【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 }
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)