以单个床位价值为分类依据
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int main() {
//特判1 2 3
ll n, p2, p3;
double n2, n3;
while (~scanf("%lld%lld%lld",&n,&p2,&p3)) {
n2 = (p2*1.0) / 2.0;
n3 = (p3*1.0) / 3.0;
ll ans=0;
if (n2 == n3)
ans = n2 * n;
else
if (n2 < n3) {// 如果n2便宜的话
if (n % 2 == 0)
ans=n/2*p2;
else if (n % 2 == 1) {
ans = (n - 3)/2 * p2 + min( 2*p2, p3);
}
} else if (n2 > n3) { //如果n3便宜的话
if (n % 3 == 0)
ans = n / 3 * p3;
else if (n % 3 == 1)
ans = (n - 4)/3*p3 + min(2 * p3, 2 * p2);
else if (n % 3 == 2)
{
ans = (n - 5)/3*p3 + min(2 * p3 ,3 * p2);
ans=min(ans,(n - 4)/3*p3 +p3+p2);
}
}
if (n == 1 || n == 2)ans = min(p2, p3);
printf("%lld\n",ans);
}
return 0;
}