生词
delivery [dɪˈlɪvəri] n.交货
scarves [skɑ:vz] n.领带(scarf的复数形式) 音标ka发汉语拼音ga音
tie n.领带
jacket n. 夹克
vest n.马甲
题意
有两类套装,第一类需要1条tie、一件夹克;第二类需要一条scarf、一件马甲、一件夹克。
给出tie、scarf、马甲、夹克各自的数量及两类套装的单价,求如何分配资源使总收益最大。
本题的问题在于第一类和第二类有共同资源,分配会导致资源争夺,求最优分配方案。实质类似贪心问题中最优装载问题:即如何分配货物的数量,使两艘有载重上限的船装满所有货物。当时的方案是先尽可能装满一艘船;再把剩余的货物装在第二艘船上。
本题的做法类似这个思路,即先尽可能将冲突资源分配给收益最大(单价最大)的一类套装;再把剩余的冲突资源分配给另一类套装。
总结:由于冲突资源有限,如果分配尽量多的冲突资源给单价最大的一类套装,那么这类套装的收益将最大化,而相应的另一类套装此时为收益最小化。
证明略
实现
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
freopen("test.txt","r",stdin);
ll a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
ll used,ans;
if(e>f){
used=min(a,d);//求出价钱最多的套能使用多少资源
ans=used*e+min(b,min(c,d-used))*f;//求出价钱最多的套卖出钱数,根据冲突资源的剩余量和其他资源求出价钱最少的套装的生产数量,进而求出总收益。
}
else{
used=min(b,min(c,d));
ans=used*f+min(a,d-used)*e;
}
cout<<ans<<endl;
return 0;
}