样例能过,但超时了,没剪枝,求助各位大佬。
查看原帖
样例能过,但超时了,没剪枝,求助各位大佬。
1066932
xinaocyy楼主2024/3/3 10:02
#include<iostream>
using namespace std;
const int MAXN = 0x3f3f3f;
const int N = 20000024; 

int ans = MAXN;
int n,m;

//now  当前要创建的蛋糕层数   
//r    当前层数的半径 
//h     当前层数的高度 
//s     已经使用的面积 
//v    已经使用的体积 

void dfs(int now,int r,int h,int s,int v){
	if(now == 0){
		if(v == n){
			ans = min(ans,s);
		}
		return;
	}
	for(int i = r - 1;i > 0;i--){//搜半径 
		if(now == m){
			s = i * i;
		}
		for(int j = h - 1;j > 0;j--){//搜高度 
			dfs(now - 1,i,j,s + 2 * i * j,v + i * i * j);
		}
	}
}

int main(){
	cin >> n >> m;
	dfs(m,n,n,0,0);
	if(ans == MAXN){
		cout << 0 << endl;
	}else{
		cout << ans << endl;
	}
	return 0;
}
/*
100
2
*/ 
2024/3/3 10:02
加载中...