博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(第五场)J plan 【贪心】
阅读量:4954 次
发布时间:2019-06-12

本文共 1532 字,大约阅读时间需要 5 分钟。

题目链接:

题目描述 

There are n students going to travel. And hotel has two types room:double room and triple room. The price of a double room is p2 and the price of a triple room is p3

Now you need to calulate the minimum total cost of these students.

输入描述:

The first line has three integers n, p2, p3

输出描述:

Output the minimum total cost.
示例1

输入

4 2 3

输出

4
示例2

输入

5 1 3

输出

3

备注:

1<=n<=10^9 1<=p2,p3<=10^9

 

题目大意:

n 个人出去玩,给定双人房和三人房的价格,求最少的住宿花费

1<=n<=10^9

官方题解:

脑补一下可以发现:最后答案一定是几乎全选性价比最高的那种房间

然后再加上几间其他的
所以二人间和三人间里数量用的最少的房间不会超过 3
枚举一下用了几间就好了

大概思路:

因为从全局来看我们要多选性价比高的房间, 所以模拟一下分为两种大情况,而每种小情况的最后可能刚刚好住满,可能有剩余,如果双人房性价比高,那么最后有可能会剩下一个可怜的家伙,那时我们要考虑单个住便宜或是跟前面的合住三人房便宜了;如果三人房性价比高,那么最后可能剩下一个人,可能剩下两个人,综上所述,数量用的最少的房间不超过3.

 

AC code:

1 #include 
2 #define INF 0x3f3f3f3f 3 #define ll long long int 4 using namespace std; 5 6 ll N, p2, p3, u; 7 8 int main() 9 {10 scanf("%lld%lld%lld", &N, &p2, &p3);11 double xj_1 = p2/2.0;12 double xj_2 = p3/3.0;13 long long int ans = 0;14 if(xj_1 <= xj_2)15 {16 if(N%2)17 {18 ans = (N/2-1)*p2 + min(p2*2, p3);19 }20 else ans = (N/2)*p2;21 }22 else23 {24 if(N%3 == 1)25 {26 ans = (N/3-1)*p3 + min(p2*2, p3*2);27 }28 else if(N%3 == 2)29 {30 ans = (N/3-1)*p3 + min(p2+p3, p3*2);31 }32 else33 {34 ans = N/3*p3;35 }36 }37 printf("%lld\n", ans);38 return 0;39 }

 

转载于:https://www.cnblogs.com/ymzjj/p/9424908.html

你可能感兴趣的文章
使用paginate方法分页无法判断获取的数据是否为空
查看>>
jQuery
查看>>
百度地图实现车辆轨迹移动播放(baidu map api)
查看>>
constructor-arg子元素的解析
查看>>
centos6.5 ssh安全优化,修改默认端口名,禁止root远程登录
查看>>
Linux下的tar压缩解压缩命令详解
查看>>
React可控组件与不可控组件
查看>>
Html5新特性
查看>>
python之常用模块学习
查看>>
实用日期时间修改方法
查看>>
sshfs把远程主机的文件系统映射到本地的目录中(转载)
查看>>
MyBatis简介
查看>>
windows下mysql 5.7以上版本安装及遇到的问题
查看>>
bash下自动重新运行git/curl等工具
查看>>
ubuntu server 1604 搭建FTP服务器
查看>>
极大似然估计
查看>>
Euclidean space-欧几里得空间【转】
查看>>
hdu 3367 Pseudoforest
查看>>
Apache Shiro 快速入门教程,shiro 基础教程
查看>>
网页设计
查看>>