这一题我用的优先队列做的,如果有1的话,就把这个1拿去加而不是乘。
具体加给谁的话, 1 小 大;如果加给小的话,最后答案会相当于多加了个大;如果加给大的话,最后答案相当于多加了个小;
既然结果要最大的话,那就加给小;

所以我开了一个从小到大的优先队列,每次检测第一个数是不是1;如果是1的话,就把这个数和第二个数给加起来,再丢回队列里面。
最后把队列里面所有的值都乘起来;

代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
    priority_queue<int,vector<int>,greater<int> >num;
    for(int i=0;i<3;i++)
    {
        int temp;
        cin>>temp;
        num.push(temp);
    }
    
    while(num.top()==1)
    {
        int temp_1=num.top();
        num.pop();
        int temp_2=num.top();
        num.pop();
        num.push(temp_1+temp_2);
    }
    long long ans=1;
    while(!num.empty())
    {
        ans*=num.top();
        num.pop();
    }
    
    cout<<ans;
    
}
纯蒟蒻,如有错误或可改进的地方,敬请各位大佬指出(给跪了orz)