比赛 2025.10.18 评测结果 WAWWWWAAWW
题目名称 生日蛋糕 最终得分 30
用户昵称 淮淮清子 运行时间 0.040 s
代码语言 C++ 内存使用 3.72 MiB
提交时间 2025-10-18 09:48:55
显示代码纯文本
#include<iostream>
#include<cmath>
using namespace std;

const int INF = 2147483646;
int N, M, ans = INF;
int V[30], S[30];

void dfs(int d, int v, int s, int pr, int ph){
	if(d > M){
		if(v == N) ans = min(ans, s);
		return;
	}
	int rem = M - d + 1;
	if(s >= ans) return;
	if(v + V[rem] > N) return;
	if(s + S[rem] >= ans) return;
	if(s + 2 * (N - v) / pr >= ans) return;
	int R = min(pr - 1, int(sqrt(N - v) / rem));
	for(int r = R;r >= rem;r --){
		int H = min(ph - 1, (N - v - V[rem - 1]) / (r * r));
		for(int h = H;h >= rem;h --){
			int av = r * r * h, as = 2 * r * h;
			if(d == 1) as += r * r;
			dfs(d + 1, v + av, s + as, r, h);
		}
	}
}

int main(){
	freopen("cake.in", "r", stdin);
	freopen("cake.out", "w", stdout);
	cin.tie(0); ios::sync_with_stdio(0);
	cin >> N >> M;
	for(int i = 1;i <= M;i ++){
		V[i] = V[i - 1] + i * i * i;
		S[i] = S[i - 1] + 2 * i * i;
	}
	S[M] += M * M;
	if(V[M] > N){
		cout << 0 << '\n';
		return 0;
	}
	dfs(1, 0, 0, N + 1, N + 1);
	cout << (ans == INF ? 0 : ans) << '\n';
	return 0;
}