Smallest number - 洛谷
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10];
string s[5];
bool vis[10];
int ans=1e13;//0x3f=1e9,所有有点不够
void dfs(int u)
{
// for(int i=0;i<4;i++)
// {
// printf("%d ",a[i]);
// }
// printf("\n");
// for(int i=0;i<4;i++)
// {
// printf("%d ",vis[i]);
// }
// printf("\n");
if(u==3)
{
for(int i=0;i<4;i++)
{
if(vis[i]==0)
ans=min(ans,a[i]);//没有被记录的数就是最终结果,求最小
}
// printf("return\n");
return;
}
for(int i=0;i<4;i++)
{
if(vis[i])continue;
for(int j=0;j<4;j++)
{
if(j==i||vis[j])continue;//若为同一个数或已被选用,跳过
int last=a[j];//last不能为全局变量
if(s[u]=="+")
{
vis[i]=1;
// last=a[j];
a[j]+=a[i];
dfs(u+1);
vis[i]=0;
a[j]=last;
}
else if(s[u]=="*")
{
vis[i]=1;
// last=a[j];
a[j]*=a[i];
dfs(u+1);
vis[i]=0;
a[j]=last;
}
}
}
}
signed main()
{
for(int i=0;i<4;i++)
{
scanf("%lld",&a[i]);
}
for(int i=0;i<3;i++)
{
cin>>s[i];
}
dfs(0);
printf("%lld\n",ans);
}