87pts求助
  • 板块P1120 小木棍
  • 楼主zzx0102
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/11/18 18:39
  • 上次更新2023/10/27 02:30:55
查看原帖
87pts求助
675466
zzx0102楼主2022/11/18 18:39
#include<bits/stdc++.h>
using namespace std;
const int N = 70;
int a[N];
int n;
int sum, mi;
int x, s;
bool vis[N];
void dfs(int cnt, int nowsum, int lst) {
    if(cnt == s) {
        cout << x;
        exit(0);
    }
    int ret = 0, f = 0;
    for(int i = lst; i <= n; i++) if(!vis[i] && f != a[i]) {
        int now = nowsum + a[i];
        if(now > x) continue;
        if(now == x) {
            vis[i] = 1;
            dfs(cnt + 1, 0, 1);
            vis[i] = 0;
            return ;
        }
        f = a[i];
        vis[i] = 1;
        dfs(cnt, now, i + 1);
        vis[i] = 0;
        if(!nowsum) return ;
    }
}
bool cmp(int &a, int &b) {
    return a > b;
}
int main() {
    cin >> n; int mx = 0;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        mx = max(mx, a[i]);
        sum += a[i];
    }
    sort(a + 1, a + 1 + n, cmp);
    for(x = mx; x <= sum / 2; x++) {
        if(sum % x) continue;
        s = sum / x - 1;
        for(int j = 1; j <= n; j++) vis[j] = 0;
        dfs(0, 0, 1);
    }
    cout << sum;
    return 0;
}

最后一个点TLE了,怎么也优化不了,求助。

2022/11/18 18:39
加载中...