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;
}