“那天TA说TA要来,于是我就来啦。
那天我说我要来,于是你就来啦。
TA看到了什么?
你又看到了什么?
我看到你们在一起,我是真的很happy:)
太阳在哪里啊?
就在早上七八点。
太阳在哪里啊?
就在云的栖息地!”
——2050主题曲
2050的线下活动吸引了很多心怀梦想的年轻人。
小伙们打算组团去参加。他们一共有 n+m+2k 个人,包括 n+k 个男生,m+k 个女生,其中 k 对男女生为异性情侣,现在他们要找房间住。房间有三种类型,双人间 a 元一间,三人间 b 元一间,这两种只能同性一起住。情侣间能住一对异性情侣,一间 c 元。除了情侣间以外,其他房间都可以不住满。
求最少花多少钱,能让小伙伴们都有地方住。
Input
第一行一个整数 T (1≤T≤50) 表示数据组数。
接下来 T 组数据,每组数据一行 6 个整数 n,m,k,a,b,c,其中 0≤n,m,k≤103,0≤a,b,c≤109。
Output
对于每组数据输出一行一个数,表示所有人住下来所需要的最小花费。
Sample Input
2 3 0 1 1 3 3 3 3 2 1 6 2
Sample Output
3 6
有很多种情况需要考虑 就是需要的情侣间个数是不确定的
因此我们只要枚举情侣间的个数
再对其进行分类讨论 取最优解即可
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long n,m,k,a,b,c;
scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&k,&a,&b,&c);
long long temp1;
long long temp2;
long long MIN=1e18;
long long sum=0;
for(long long i=0;i<=k;i++)//i qinglv
{
sum=0;
long long tmpm=1e18;
sum+=i*c;
temp1=n+k-i;
temp2=m+k-i;
//nan
if(temp1%3==0)
{
tmpm=min(tmpm,temp1/3*b);
}
if(temp1%3==1)
{
tmpm=min(tmpm,max(temp1/3-1,1ll*0)*b+2*a);
tmpm=min(tmpm,(temp1/3+1)*b);
}
if(temp1%3==2)
{
tmpm=min(tmpm,(temp1/3)*b+a);
tmpm=min(tmpm,(temp1/3+1)*b);
}
if(temp1%2==1)
{
tmpm=min(tmpm,(temp1/2+1)*a);
tmpm=min(tmpm,max(temp1/2-1,1ll*0)*a+b);
}
if(temp1%2==0)
{
tmpm=min(tmpm,(temp1/2)*a);
}
//tmpm=max(1ll*0,tmpm);
//cout<<tmpm;
sum+=tmpm;
tmpm=1e18;
//nv
if(temp2%3==0)
{
tmpm=min(tmpm,temp2/3*b);
}
if(temp2%3==1)
{
tmpm=min(tmpm,max((temp2/3-1)*b,1ll*0)+2*a);
tmpm=min(tmpm,(temp2/3+1)*b);
}
if(temp2%3==2)
{
tmpm=min(tmpm,(temp2/3)*b+a);
tmpm=min(tmpm,(temp2/3+1)*b);
}
if(temp2%2==1)
{
tmpm=min(tmpm,(temp2/2+1)*a);
tmpm=min(tmpm,max(temp2/2-1,1ll*0)*a+b);
}
if(temp2%2==0)
{
tmpm=min(tmpm,(temp2/2)*a);
}
//tmpm=max(1ll*0,tmpm);
sum+=tmpm;
//cout<<tmpm<<endl;
MIN=min(MIN,sum);
}
printf("%lld
",MIN);
}
}