求助 玄关 0分
查看原帖
求助 玄关 0分
1161278
happy_lion楼主2025/1/9 17:28
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[20],b[20];
string pp[36290];
int cnt = 0;
bool f[10];
void dfs(int n,string p,int mx) {
    if (n <= 0) {
        cnt++;
        pp[cnt] = p;
        return ;
    }
    for (int i=1;i<=mx;i++) {
        if (f[i]) {
            continue;
        }
        string o = p;
        o = o + (char)(i+'0');
        f[i] = true;
        dfs(n-1,o,mx);
        f[i] = false;
    }
}
int suan(string p,int mx) {
    int c = 0;
    for (int i=0;i<p.size();i++) {
        int ii = (p[i]-'0');
        c++;
        if (ii != mx) {
            c += max(b[ii+1],a[ii+2]);
        }
    }
    return c;
}
signed main() {
    int n;
    cin >> n;
    for (int i=1;i<=n;i++) {
        cin >> a[i] >> b[i];
    }
    dfs(n,"",n);
    int mn = 1e9;
    for (int i=1;i<=cnt;i++) {
        mn = min(mn,suan(pp[i],n));
    }
    cout << mn;
}

样例过但是没法AC

2025/1/9 17:28
加载中...