• 分宿舍(暴力枚举)


    “那天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);
        }
    }
  • 相关阅读:
    应用监控CAT之cat-client源码阅读(一)
    java中this的N种使用方法
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Software Engineer II
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852290.html
Copyright © 2020-2023  润新知