NC216206. DrinkingTimeIII
描述
输入描述
输出只有三个整数,分别表示三种饮料的个数。
输出描述
输出一个整数,表示可以调出最多鸡尾酒的方案数,调不出鸡尾酒也被认为是一种方案。
示例1
输入:
1 2 3
输出:
9
说明:
调出最多鸡尾酒的方案总有以下九种:C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 492K, 提交时间: 2020-12-26 18:05:36
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=10; ll a,b,c,ans,mx,F[20],P[20]; ll C(int n,int m){ return F[n]/F[m]/F[n-m]; } ll calc(int x,int y,int z){ return C(a,x)*C(a-x,y)*C(b,x)*C(c,y)*C(c-y,2*z)*F[2*z]/F[z]/P[z]*F[x]*F[y]; } int main(){ for(int i=F[0]=1;i<=N;i++)F[i]=F[i-1]*i; for(int i=P[0]=1;i<=N;i++)P[i]=P[i-1]*2; cin>>a>>b>>c; for(ll x=0;x<=10;x++){//x=a+b for(ll y=0;y<=10;y++){//y=a+c for(ll z=0;z<=10;z++){//z=c+c if(x+y<=a&&x<=b&&2*z+y<=c){ if(x+y+z>mx){ mx=x+y+z; ans=calc(x,y,z); }else if(x+y+z==mx){ ans+=calc(x,y,z); } } } } } cout<<ans; }