T4个点,已老实,求剪枝
查看原帖
T4个点,已老实,求剪枝
576387
AMlhd楼主2024/9/10 21:35

已老实,求剪枝

#include <bits/stdc++.h>
using namespace std;

int n, c;
int a[1001];
long long maxx = -1;
long long sum;

void ssearch(int p, int q) {
    for(int i = q + 1; i <= n; ++i) {
        if(a[i] < a[p] + a[q]) {
            continue;
        }
        if(sum + a[i] > c) {
            maxx = max(maxx, sum);
            return ;
        }
        else {
            sum += a[i];
            ssearch(q, i);
            sum -= a[i];
        }
    }
    maxx = max(maxx, sum);
    return ;
}

int main() {

    ios::sync_with_stdio(false);

    cin >> n >> c;

    for(int i = 1; i <= n; ++i) {
        cin >> a[i];
        if(a[i] > c) {
            --n;
        }
        if(a[i] == c) {
            cout << c << endl;
            return 0;
        }
    }

    for(int i = 1; i <= n; ++i) {
        for(int j = i + 1; j <= n; ++j) {
            if(a[i] + a[j] > c) {
                break;
            }
            sum = a[i] +  a[j];
            ssearch(i, j);
        }
    }

    cout << maxx << endl;
    return 0;
}
2024/9/10 21:35
加载中...