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
                       
题目链接:https://nanti.jisuanke.com/t/430

解题思路:

 

暴力枚举节目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 }
复制代码

 

                                    
posted @   Angel_Kitty  阅读(268)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示
西雅图
14:14发布
西雅图
14:14发布
6°
西南风
5级
空气质量
相对湿度
93%
今天
中雨
3°/9°
周日
雨夹雪
3°/6°
周一
小雨
3°/10°