Codeforces 55B Smallest number(大力搜)
阿新 • • 發佈:2020-07-21
解題思路
一共就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; }