10分求调
查看原帖
10分求调
626374
Future_Comet楼主2025/7/3 21:06

仅过第一个点,代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m,minv[30],ans=INT_MAX;
void dfs(int x,int r,int h,int v,int s)
{
	if(!x)
	{
		if(v==n)
			ans=min(ans,s);
		return;
	}
	if(v+minv[x]>n||s+2*(n-v)/r>ans)
		return;
	for(int i=h;i>=x;i--)
		for(int j=min(r,(int)sqrt((n-v)/i));j>=x;j--)
			if(v+i*j*j<=n)
			{
				if(x==m)
					dfs(x-1,i-1,j-1,v+i*j*j,s+2*i*j+j*j);
				else
					dfs(x-1,i-1,j-1,v+i*j*j,s+2*i*j);
			}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=20;i++)
		minv[i]=minv[i-1]+i*i*i;
	dfs(m,(int)sqrt(n),n,0,0);
	if(ans==INT_MAX)
		cout<<0;
	else
		cout<<ans;
	return 0;
}

求调

2025/7/3 21:06
加载中...