Codeforces 55B Smallest number(大力搜)
解题思路
一共就4个数,分3步,每次让两个数通过乘或加合并成一个数,数据范围很小,所以直接大力搜就是了。
代码
ll a[4], ans = LLONG_MAX;
bool vis[maxn];
string s;
void dfs(int p) {
if (p==3) {
for (int i = 0; i<4; ++i)
if (!vis[i]) ans = min(ans,a[i]);
return;
}
for (int i = 0; i<4; ++i)
for (int j = 0; j<4; ++j)
if (i!=j && !vis[i] && !vis[j]) {
vis[i] = true;
ll tmp = a[j];
if (s[p]=='*') a[j] *= a[i];
else a[j] += a[i];
dfs(p+1);
a[j] = tmp;
vis[i] = false;
}
}
int main() {
for (int i = 0; i<4; ++i) scanf("%lld",&a[i]);
char ch[2];
for (int i = 0; i<3; ++i) {
scanf("%s",ch); s += ch[0];
}
dfs(0);
printf("%lld\n",ans);
return 0;
}