题目链接 补一道一个月前欠下的题… 本来因为2050做得太菜然后逃避不想看了… 但是听说今年女生赛还是wls出题…就过来补了吧hhh 题意: 一共有 n+m+2k 个人,包括 n+k 个男生,m+k 个女生,其中 k 对男女生为异性情侣,现在他们要找房间住。房间有三种类型,双人间 a 元一间,三人间 b 元一间,这两种只能同性一起住。情侣间能住一对异性情侣,一间 c 元。求最小花费。 思路: 注释写的很明白啦 这道题循环就可以了(不知道自己当时写那么麻烦在写啥…)
#include<stdio.h> #include<algorithm> using namespace std; int main() { long long t; scanf("%lld",&t); while(t--) { long long ans,minn=1000000000000000000;//就是养不成定义的好习惯.. long long m,n,k,a,b,c,i,j; scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&k,&a,&b,&c); for(i=0; i<=k; i++)//情侣宿舍的数目 { long long n1,m1,k1; k1=i;//住情侣房的对数 n1=n+k-i;//剩余的男生 m1=m+k-i;//剩余的女生 ans=k1*c; long long minn1=1000000000000000000,minn2=1000000000000000000; for(j=0; j<=(n1+1)/2; j++) //男生住2人宿舍的数目 { if(j*a+(n1-j*2+2)/3*b<minn1) { minn1=j*a+(n1-j*2+2)/3*b; } } if(minn1!=1000000000000000000) ans=ans+minn1; for(j=0; j<=(m1+1)/2; j++) //女生住2人宿舍的数目 { if(j*a+(m1-j*2+2)/3*b<minn2) { minn2=j*a+(m1-j*2+2)/3*b; } } if(minn2!=1000000000000000000) ans=ans+minn2; /*if(i==0) printf("%lld\n",minn2);*/ if(ans<minn) minn=ans; } printf("%lld\n",minn); } }