比赛 |
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;
}