2015 计蒜之道 初赛(4)爱奇艺的自制节目(枚举 贪心)
爱奇艺的自制节目
爱奇艺作为一家视频网站巨头,要为上亿的用户每天都提供“悦享品质”的服务。除了引进一些优秀的影视作品外,爱奇艺还做了一些诸如奇葩说、晓松奇谈的自制节目。爱奇艺最近又准备制作四档新的节目,它们分别是 W, X, Y, Z;但是现在能用来录这些节目的演播室只有两个,分别是演播室 A 和演播室 B。
W 节目的现场搭建比较复杂,每一期都要在演播室 A 来录制,X 节目的摄影机位调整会影响节目质量,每一期都固定在演播室 B 来录制。而节目 Y 和节目 Z 的搭建都比较容易移动,摄影也没有特别的要求,既可以在演播室 A 录制,也可以在演播室 B 录制。
已知 W 节目一共 Ew 期,每期录制需要 w 分钟;X 节目一共 Ex 期,每期录制需要 x 分钟;Y 节目一共 Ey 期,每期录制需要 y 分钟;Z 节目一共 Ez 期,每期录制需要 z 分钟。
每一期节目从开始到结束必须在同一个演播室内录制,而整个节目不必每一期都在同一个演播室内录制。现在爱奇艺希望在最短时间内在这两个演播室内将四档节目录制完成,在节目都连续录制的假设下,你能帮他们算出将节目全部录制完成所需的最短时间么?
输入格式
第一行输入一个整数 T (1 ≤ T ≤ 50),表示数据组数。
接下来一共输入 T 行数据,每行输入一组 8 个整数 Ew, Ex, Ey, Ez, w, x, y, z (1 ≤ Ew, Ex, Ey, Ez, w, x, y, z ≤ 106)。
输出格式
输出 T 行,每行一个整数,表示该组四档节目在连续录制的假设下,全部录完所需要的最短时间。
样例输入
1 100 1 3 5 10 1 10 10
样例输出
1000
解题思路:
暴力枚举节目Y在A演播室的天数,然后贪心。
注意INF的取值。
下面给出AC代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define INF 1ll<<60 5 int main() 6 { 7 ll T; 8 while(scanf("%lld",&T)!=EOF) 9 { 10 while(T--) 11 { 12 ll Ew,Ex,Ey,Ez,w,x,y,z; 13 cin>>Ew>>Ex>>Ey>>Ez>>w>>x>>y>>z; 14 ll tw=Ew*w; 15 ll tx=Ex*x; 16 if(y<z) 17 { 18 swap(Ey,Ez); 19 swap(y,z); 20 } 21 ll ans=INF; 22 for(ll i=0;i<=Ey;i++) 23 { 24 ll ta=tw+i*y; 25 ll tb=tx+(Ey-i)*y; 26 ll sum; 27 if(ta>tb) 28 swap(ta,tb); 29 ll tmp=(tb-ta)/z; 30 if(Ez<=tmp) 31 sum=tb; 32 else 33 { 34 ta+=tmp*z; 35 ll left=Ez-tmp; 36 if(left%2==1) 37 sum=ta+((left+1)/2)*z; 38 else sum=tb+left/2*z; 39 } 40 ans=min(ans,sum); 41 } 42 printf("%lld\n",ans); 43 } 44 } 45 return 0; 46 }
作 者:Angel_Kitty
出 处:https://www.cnblogs.com/ECJTUACM-873284962/
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注我的微信公众号IT老实人(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯咖啡以资鼓励,您的肯定将是我最大的动力。thx.
我的公众号是IT老实人(IThonest),一个有故事的公众号,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!
欢迎大家关注我的Github,一些文章的备份和平常做的一些项目会存放在这里。