牛客网暑期ACM多校训练营(第五场)
2024-08-27 08:46:53
J-plan(贪心)
题目描述
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.
输入例子:
4 2 3
输出例子:
4
-->
示例1
输入
4 2 3
输出
4
示例2
输入
5 1 3
输出
3
备注:
1<=n<=10^9
1<=p2,p3<=10^9
解题思路:题意很简单,就是安排n个学生全部住进2人间或者3人间(可以不住满)后使得总花费最少。典型的贪心策略,考虑性价比,设2人间的单价为x/间,性价比为x/2,3人间的单价为y/间,性价比为y/3,分为两种情况:一、如果3*x>2*y,表示应选3人间比较划算,那么有3种贪心可能:①n%3余数为0,全选3人间;②余数为1,全选3人间,或者最后1个学生选2人间,或者最后4个学生选2人间;③余数为2,全选3人间,或者最后2个学生选2人间;二、如果3*x<=2*y,表示选2人间比较划算,那么有2种贪心可能:①n%2余数为1,全选2人间,或者最后一个学生选3人间;②余数为0,全选2人间。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL n,x,y;
int main(){
while(cin>>n>>x>>y){
if(*x>*y){
if(!(n%))cout<<n/*y<<endl;
else if(n%==)cout<<min(min((n/+)*y,n/*y+x),(n/-)*y+*x)<<endl;
else cout<<min((n/+)*y,n/*y+x)<<endl;
}
else{
if(n%)cout<<min((n/+)*x,(n/-)*x+y)<<endl;
else cout<<n/*x<<endl;
}
}
return ;
}
最新文章
- Vue.js——vue-resource全攻略
- Android面试题--事件处理
- delay(和setTimeout()的区别
- spark单机环境下运行一些解决问题
- js判断微信浏览器
- Ext的Panel总结(好文章)
- 根据DateTime来获取当天是周几(已完结)
- Hadoop HDFS概念学习系列之hdfs里的文件下载闲谈(二十六)
- 2016032101 - eclipse3.7+jdk1.6+maven3.0.5
- 学习Swift -- 析构过程
- Redis性能调优:保存SNAPSHOT对性能的影响
- struts2 <;s:iterator/>;怎样取得循环的索引
- 设计模式——代理模式(C++实现)
- Orcle查询优化改写-----单表查询
- mybatis源码之BaseStatementHandler
- Promise(一)
- Azure系列2.1.10 —— CloudBlobClient
- Centos-6.5搭建oracle11g RAC集群
- Qt中 .pro 文件和 .pri 文件简介
- I - Crossing River
热门文章
- 学习MarkDown--初体验
- linux 解压zip文件
- 深入理解 C 指针阅读笔记 -- 第六章
- 加密壳之ACProtect之OEP的处理
- ora-12541无监听的一种场景
- 2016/2/25 1, margin auto 垂直方向测试 无效 2,margin重叠 3,哪些是块状哪些是内联 4,display:block inline 导航栏把内联转块状最常见+ 扩展
- Speech Recognition Grammar Specification Version 1.0 JavaScript TTS 文本发音
- MySQL之——server保持与MySQL的连接
- forword 与 redirect
- ubuntu切换中英文通用方法,ubuntu中文语言