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
",ans);
    return 0;                                                                 
}
原文地址:https://www.cnblogs.com/shuitiangong/p/13353625.html