牛客网多校赛第五场 J题

链接:https://www.nowcoder.com/acm/contest/143/J
来源:牛客网
 

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

这个题主要是性价比的问题,但是相对于一个问题来说他不能太绝对,这时就会出错。比如:

13 4 5
23

在做题时不要出尽,留下很少的一部分来枚举,这样就可以避免出现错误,可以看我的代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>

using namespace std;
typedef long long ll;
const ll maxn=1e7+10;
ll n,p2,p3;
int main(){
	ios::sync_with_stdio(false);
	while(cin>>n>>p2>>p3){
		if(p2*3==p3*2){
			if(n%2==0)cout<<n/2*p2<<endl;
			else cout<<(n/2-1)*p2+p3<<endl;
		}
		if(p2*3>p3*2){
			if(n%3==0)cout<<n/3*p3<<endl;
			else {
				ll t=n%3+3;
				ll sum = (n/3-1)*p3;
				if(t==4){
				  ll sum1 = p2+p2+sum;
				  ll sum2 = p2+p3+sum;
				  ll sum3 = p3+p3+sum;
				  cout<<min(min(sum1,sum2),sum3)<<endl;
				}
				if(t==5){
					ll sum1 = p2+p2+p2+sum;
					ll sum2 = p2+p3+sum;
					ll sum3 = p3+p3+sum;
					cout<<min(min(sum1,sum2),sum3)<<endl;
				}	
			}
		}
		if(p2*3<p3*2){
			if(n%2==0)cout<<n/2*p2<<endl;
			else {
				ll t=n%2+2+2;
				ll sum = (n/2-2)*p2;
				if(t==3){
					ll sum1 = p2+p2+sum;
					ll sum2 = p3+sum;
					cout<<min(sum1,sum2)<<endl;
				}
				if(t==4){
					ll sum1 = p2+p2+sum;
				  	ll sum2 = p2+p3+sum;
				 	ll sum3 = p3+p3+sum;
				  	cout<<min(min(sum1,sum2),sum3)<<endl;
				}
				if(t==5){
					ll sum1 = p2+p2+p2+sum;
					ll sum2 = p2+p3+sum;
					ll sum3 = p3+p3+sum;
					cout<<min(min(sum1,sum2),sum3)<<endl;
				}
			} 
		}
	}
	
	return 0;
}

有点复杂,应该可以简化。希望大家有好的可以评论,相互学习;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值