求助爆搜、请求开大时限
查看原帖
求助爆搜、请求开大时限
574944
Micnation_AFO楼主2022/9/9 22:51

rt,时限的事情详见:https://www.luogu.com.cn/discuss/461880

然后这个蒟蒻很不幸地被卡了/kk:

感觉读入优化的话帮助不大,因为 nn 只有 6060

代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 75;
const int INF = 1e9;

int n;
int a[N];
int val = -INF, sum = 0;
bool vis[N];

bool dfs(int stick, int num, int now, int last, int len) {
    if (stick == num) return true;
    if (now == len) return dfs(stick + 1, num, 0, 1, len);
    int fail = 0;
    for (int i = last; i <= n; i++) {
        if (vis[i] || fail == a[i] || now + a[i] > len) continue;
        //if (now + a[i] > len) break;
        fail = a[i], vis[i] = true;
        if (dfs(stick, num, now + a[i], i + 1, len)) return true;
        vis[i] = false;
        if (now == 0 || now + a[i] == len) return false;
    }
    return false;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i], val = max(val, a[i]), sum += a[i];
    sort(a + 1, a + 1 + n);
    reverse(a + 1, a + 1 + n);
    int res;
    for (int i = val; i <= sum; i++) {
        if (sum % i) continue;
        memset(vis, 0, sizeof(vis));
        if (dfs(1, sum / i, 0, 1, i)) {
            cout << i << endl;
            return 0;
        }
    }
    return 0;
}

2022/9/9 22:51
加载中...