-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCCW4E.cpp
More file actions
67 lines (57 loc) · 1.23 KB
/
CCW4E.cpp
File metadata and controls
67 lines (57 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
这个题其实思路很简单的,可以直接爆搜解决,但是在测试的时候自己还是没有写出来
然后去看了下题解,发现是dfs直接过的,三个函数表示题目中对应的三种状态。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
typedef long long ll;
char s[10];
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(int argc, char *argv[]) {
int a, b, c, d;
while (scanf("%d%d%d%d",&a, &b, &c, &d) != EOF){
cin >> s[0] >> s[1] >> s[2];
dfs1(a, b, c, d);
cout << ans << endl;
}
return 0;
}