四个瓷瓶的神秘游戏 贪心 难

文章描述了一种算法,针对四个瓶子中的珠子进行操作,以最大化目标瓶子的值。首先对目标瓶子进行填充,然后处理剩余的瓶子以确保最少和次最少的瓶子为0。最后根据特定规则调整值并输出最大结果。
摘要由CSDN通过智能技术生成

分别以每个瓶子为目标来使他达到最大,然后再取最大值。 先对目标瓶子(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值