[CodeForces - 1271A ]suits

生词

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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值