这一题我用的优先队列做的,如果有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)
京公网安备 11010502036488号