PAT 1020 月饼 测试点3错误

简单的贪心法,代码如下

 1 #include <iostream>
 2 #include<stdio.h>
 3 double amount[1000];
 4 double price[1000];
 5 using namespace std;
 6 int getMax(int n){
 7     int result=0;
 8     for(int i=0;i<n;i++){
 9         if(price[i]>price[result]) result=i;
10     }
11     return result;
12 }
13 int main()
14 {
15     int n;
16     double max_require;
17     cin>>n;
18     cin>>max_require;
19     for(int i=0;i<n;i++){
20         cin>>amount[i];
21     }
22     for(int i=0;i<n;i++){
23         cin>>price[i];
24     }
25     for(int i=0;i<n;i++){
26         price[i]=price[i]/amount[i];
27     }
28     int sell;
29     double sold_amount=0;
30     double in_come;
31     while(true){
32        sell=getMax(n);
33        if(price[sell]==-1) break;
34        if((amount[sell]+sold_amount)<max_require){
35             sold_amount+=amount[sell];
36             in_come+=price[sell]*amount[sell];
37             price[sell]=-1;
38        }
39        else{
40             in_come+=price[sell]*(max_require-sold_amount);
41             break;
42        }
43     }
44     printf("%.2f",in_come);
45 }

测试点3错误的原因是:没有考虑所有库存相加都无法满足市场需求的情况,加上代码中第33行测试通过,该行代码表示所有月饼都卖出了(所有price都是-1了,因此最大值自然是-1),仍然不能不能满足市场需求,退出循环

原文地址:https://www.cnblogs.com/za-chen/p/13235358.html