2019-05-09 团体程序设计天梯赛-练习集 L2-003

2019-05-09  本文已影响0人  快意江湖
本题难度:

简单~

思路分析

这是个简单的贪心问题,通过库存与售价算出单价。
单价高的物品优先出售。

注意问题

数据存储要选对,该用double的别用成int

C++代码

#include<iostream>
#include<cstdio>
#define iIN(x,y) for(int i=x;i<y;i++)
using namespace std;
double kg[1005];
double price[1005];
double rate[1005];
int main(){
    int N;
    double D;
    double total=0.0;
    cin>>N>>D;
    iIN(0,N){
        cin>>kg[i];
    }
    iIN(0,N){
        cin>>price[i];
    }
    iIN(0,N){
        rate[i]=price[i]/kg[i];
        //cout<<i<<" "<<rate[i]<<endl;//
    }
    while(D>0){ //还有库存就循环 
        //找单价最大并且有库存的
        int which=-1;
        double r=-1;
        iIN(0,N){
            if(kg[i]>0 && rate[i]>r){
                which=i;
                r=rate[i];
            }
        } 
        
        if(which==-1)break;//所有物品都没有库存了
        //首先是看这件物品是不是能全部出售
        if(kg[which]<=D){
            D-=kg[which];
            total+=price[which];
            kg[which]=0;
        }
        else
        {
            total+=D*rate[which];
            break;  
        }
    } 
    printf("%.2f",total);
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读