zoukankan      html  css  js  c++  java
  • hdu6492 暴力预处理 + 枚举

    http://acm.hdu.edu.cn/showproblem.php?pid=6492

    题意

    他们一共有 n+m+2k 个人,包括 n+k 个男生,m+k 个女生,其中 k 对男女生为异性情侣,现在他们要找房间住。房间有三种类型,双人间 a 元一间,三人间 b 元一间,这两种只能同性一起住。情侣间能住一对异性情侣,一间 c 元。除了情侣间以外,其他房间都可以不住满。
    求最少花多少钱,能让小伙伴们都有地方住。((n,m,k leq 10^3))

    题解

    • 把人分成三部分,男同性,女同性,情侣,因为情侣间不能空,所以一定是枚举情侣间数,然后剩下的住同性,所以本质上来说处理男同女同是一样的
    • 暴力预处理出i个同性所需要的最小花费,枚举情侣间维护最小费用

    代码

    #include<bits/stdc++.h>
    #define inf 1e18
    #define ll long long 
    using namespace std;
    ll n,m,k,a,b,c,Mi[4005],ans;
    int T;
    int main(){
        cin>>T;
        while(T--){
            ans=inf;
            scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&k,&a,&b,&c);
            for(int i=0;i<=n+m+k;i++)Mi[i]=inf;
            for(ll i=0;i<=n+m+k;i++){
                for(ll j=0;j<=i/2+1;j++){
                    if(j*2>=i)Mi[i]=min(Mi[i],j*a);
                    else{
                        ll lt=i-j*2;
                        if(lt%3==0)Mi[i]=min(Mi[i],j*a+lt/3*b);
                        else Mi[i]=min(Mi[i],j*a+(lt/3+1)*b);
                    }
                }
            }
            for(ll i=0;i<=k;i++){
                ans=min(ans,Mi[n+k-i]+Mi[m+k-i]+i*c);
            }
            printf("%lld
    ",ans);
        }
    }
    
  • 相关阅读:
    强迫症患者
    GG的匹配串
    漂洋过海来看你
    Fire or Retreat
    1011. A+B和C (15)
    1010. 一元多项式求导 (25)
    1009. 说反话 (20)
    1008. 数组元素循环右移问题 (20)
    1007. 素数对猜想 (20)
    1006. 换个格式输出整数 (15)
  • 原文地址:https://www.cnblogs.com/VIrtu0s0/p/10815604.html
Copyright © 2011-2022 走看看