链接: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;
}