题意:给你4个数,然后给你三个符号,问你怎么安排着4个数的顺序,可以使得最后的答案最小,4个数和三个符号,选两个数和第一个符号出来,得到一个数,3个数和2个符号,选两个数和第二个符号出来,得到一个数,2个数和1个符号,得到答案,要求使得答案最小
思路:直接爆搜就好了
#include<bits/stdc++.h>
using namespace std;
#define LL long long
char s[4];
LL ans = 1LL<<60;
void dfs3(LL a,LL b)
{
LL temp=0;
if (s[2]=='+')
temp = a+b;
else
temp = a*b;
ans = min(ans,temp);
}
void dfs2(LL a,LL b,LL c)
{
if (s[1]=='+')
{
dfs3(a+b,c);
dfs3(a+c,b);
dfs3(b+c,a);
}
else
{
dfs3(a*b,c);
dfs3(a*c,b);
dfs3(b*c,a);
}
}
void dfs1(LL a,LL b,LL c,LL d)
{
if (s[0]=='+')
{
dfs2(a+b,c,d);
dfs2(a+c,b,d);
dfs2(a+d,b,c);
dfs2(b+d,a,c);
dfs2(b+c,a,d);
dfs2(c+d,a,b);
}
else
{
dfs2(a*b,c,d);
dfs2(a*c,b,d);
dfs2(a*d,b,c);
dfs2(b*d,a,c);
dfs2(b*c,a,d);
dfs2(c*d,a,b);
}
}
int main()
{
LL a,b,c,d;
cin >> a >> b >> c >> d;
cin >> s[0] >> s[1]>>s[2];
dfs1(a,b,c,d);
cout <<ans << endl;
}