原题:4213. 最小结果
#include <iostream>
#include <vector>
using namespace std;
typedef long long LL;
char op[5];
LL ans = 1e18;
void dfs(vector<LL> v, int u) {
if (v.size() == 1) {
ans = min(ans, v[0]);
return;
}
for (int i = 0; i < v.size(); i++) {
for (int j = i + 1; j < v.size(); j++) {
vector<LL> t;
for (int k = 0; k < v.size(); k++) {
if (k != i && k != j) {
t.push_back(v[k]);
}
}
if (op[u] == '*') {
t.push_back(v[i] * v[j]);
}
if (op[u] == '+') {
t.push_back(v[i] + v[j]);
}
dfs(t, u + 1);
}
}
}
int main() {
vector<LL> v(4);
for (int i = 0; i < 4; i++) {
cin >> v[i];
}
for (int i = 0; i < 3; i++) {
cin >> op[i];
}
dfs(v, 0);
cout << ans << endl;
return 0;
}
输入样例
输入
1000 1000 999 1000
* * *
输出
999000000000
类似题:24 点游戏