70pts,TLE#2#7#9求优化
查看原帖
70pts,TLE#2#7#9求优化
743373
Vitamin_B楼主2024/3/12 22:28
# include <bits/stdc++.h>

# define ffor(i,name) \
	for (auto i = name.begin (); i != name.end (); ++ i)

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

const int inf = 1e9;

int n, m, minx = inf, minv[20], mins[20];

inline void dfs (int step, int n, int now, int lstr, int lsth) {

	if (n < minv[step] || now + mins[step] >= minx)
		return ;
//	cerr << step << ' ' << n << ' ' << now << ' ' << lstr << ' ' << lsth << '\n';
	if (! step) {

		if (! n)
			minx = now;

		return ;

	}

	for (int r = min (lstr, (int) sqrt (n)); r >= step && r * r <= n; -- r)
		for (int h = min (lsth, n / r / r); h >= step && h * r * r <= n; -- h)
			dfs (step - 1, n - r * r * h, now + r * 2 * h + (step >= m) * r * r, r - 1, h - 1);

	return ;

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> n >> m;

	for (int i = 1; i <= m; ++ i)
		minv[i] = minv[i - 1] + i * i * i, mins[i] = mins[i - 1] + i * 2 * i;

	dfs (m, n, 0, inf, inf);

	cout << (minx < inf ? minx : 0);

	return 0;

}
2024/3/12 22:28
加载中...