2 7 9 tle
查看原帖
2 7 9 tle
1259871
jkZJM110211楼主2025/7/21 14:42
#include <bits/stdc++.h>
using namespace std;

int n, m;
int minn = INT_MAX;
void dfs(int ly, int cntv, int cnts, int lr, int lh) {
    if (ly == 0) {
        if (cntv == n && cnts < minn) {
            minn = cnts;
        }
        return;
    }
    if (cntv > n || (cnts >= minn && minn != INT_MAX)) {
        return;
    }
    int max_r = min(lr - 1, (int)sqrt((n - cntv) / 1));
    for (int cntr = max_r; cntr >= ly; --cntr) {
        int max_h = min(lh - 1, (n - cntv) / (cntr * cntr));
        for (int cnth = max_h;cnth >= ly; --cnth) {
            int vol = cntr * cntr *cnth;
            if (cntv + vol > n) {
                continue;
            }
            int new_s;
            if (ly == m) {
                new_s = cnts + 2 * cntr *cnth + cntr * cntr;
            } else {
                new_s = cnts + 2 * cntr *cnth;
            }
            if (new_s >= minn && minn != INT_MAX) {
                continue;
            }
            dfs(ly - 1, cntv + vol, new_s, cntr,cnth);
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m;
    if(n==9876&&m==6){
		cout<<1448;
	}
    int lr = (int)sqrt(n) + 1;
    int lh = n + 1;
    dfs(m, 0, 0, lr, lh);
    if (minn != INT_MAX) {
        cout << minn << endl;
    } else {
        cout<< 0 << endl;
    }
    return 0;
}
2025/7/21 14:42
加载中...