分别以每个瓶子为目标来使他达到最大,然后再取最大值。 先对目标瓶子(top)尽可能投,top值将达到top += base [0]2 (base0是最少的瓶子,即投到base0的珠子为0,然后开启二阶段) 二阶段就是补充为0的瓶子(如果出现了两个为零的瓶子,就无法操作了) 对于top瓶子来说,他没少一颗,base0就多两颗,结局是top再多四颗,总的下来就是top多三颗 top += (次少的瓶子-最少的瓶子)/33,,,,(除以3是因为在补充base0时,不要让base0反超base1了) 最后再判断补充过后,base1比base0多几颗(只有0,1,2)三种可能,其中只有为2的时候,top可以通过变化再+1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int equal_count(ll arr[])//判断4个数中有几个数是相同的
{
if(arr[0]==arr[1]&&arr[0]==arr[2]&&arr[0]==arr[3])return 4;
else if(arr[0]==arr[1]&&arr[0]!=arr[2])return 2;
else if(arr[1]==arr[2]&&arr[2]!=arr[3]&&arr[0]!=arr[1])return 2;
else if(arr[2]==arr[3]&&arr[0]!=arr[1]&&arr[1]!=arr[2])return 2;
else if(arr[0]==arr[1]&&arr[0]==arr[2]&&arr[0]!=arr[3])return 3;
else if(arr[1]==arr[2]&&arr[1]==arr[3]&&arr[1]!=arr[0])return 3;
else return 1;
}
int main()
{
ll arr[4];
for(int i=0;i<4;i++)
{
cin>>arr[i];
}
ll MAX=-1;
sort(arr,arr+4);//从小到大排序
int flag=equal_count(arr);//先求出序列中有几个数是相同的
if(flag==4||flag==3)
{
if(arr[0]<arr[1])MAX=arr[0]+2*arr[3];
else MAX=arr[3]+2*arr[0];
cout<<MAX<<endl;
return 0;
}
MAX=arr[3]+arr[0]*2;
arr[2] -= arr[0];
arr[1] -= arr[0];
arr[0] = 0;
MAX += arr[1]/3*3;
if(arr[1]%3==2)MAX++;
cout<<MAX<<endl;
return 0;
}