package work;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Cake1190 {
static int N, M;
static int mins;
static int[] vmin;
static int[] smin;
public static void main(String[] args) throws FileNotFoundException {
/* Scanner sc=new Scanner(System.in); */
Scanner sc = new Scanner(new File("src/cake1190.txt"));
mins = 0xfffffff;
vmin = new int[21];
smin = new int[21];
for (int i = 1; i < 21; i++) {
vmin[i] = vmin[i - 1] + i * i * i;
}
for (int i = 1; i < 21; i++) {
smin[i] = smin[i - 1] + 2 * i * i;
}
N = sc.nextInt();// 体积
M = sc.nextInt();// 层数
dfs(M, 100, 10000, N, 0);
if (mins == 0xfffffff){
System.out.println(0);
}
else
System.out.println(mins);
}
// 当前层数,最后一个的半径,最后一个的高,剩下的体积,当前的总表面积
private static void dfs(int step, int lastr, int lasth, int leftv, int curs) {
if (step == 0) {
if (leftv == 0 && mins > curs){
mins = curs;
}
return;
}
if (leftv < 0 || leftv <vmin[step]
|| curs + smin[step] >= mins
|| 2 * leftv / lastr + curs >=mins) {
return;
}
for (int r = lastr; r >= step; r--) {
if (step == M ) {
curs = r * r;
}
for (int h = lasth ; h >= step; h--) {
dfs(step - 1, r-1, h-1, leftv -h * r * r, curs + 2 * r * h);
}
}
return;
}
}
、、input
10000
2
100
2
、、output
1424