求助!!
  • 板块学术版
  • 楼主Atri_Lobato
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/13 17:33
  • 上次更新2024/6/13 20:42:28
查看原帖
求助!!
1065103
Atri_Lobato楼主2024/6/13 17:33

生日蛋糕

#include<iostream>
using namespace std;
int minn_v[105];
int dp[100005][16][16][16];
int dfs(int v,int layer,int lh,int lr)
{
//	cout<<"i";
	if(dp[v][layer][lh][lr]>0)
	{
		return dp[v][layer][lh][lr];
	}
	int minn=999999999;
	if(layer==1)
	{
		for(int r=1;r<lr;r++)
		{
			if(v%(r*r)==0&&v/(r*r)<lh)
			{
				minn=min(minn,2*r*(v/(r*r)));
			}
		}
		dp[v][layer][lh][lr]=minn;
		return minn;
	}
	for(int r=layer;r<lr&&v>=(r*r);r++)//
	{
		for(int h=layer;h<lh&&v-h*r*r>=minn_v[layer-1];h++)//
		{
			minn=min(dfs(v-h*r*r,layer-1,h,r)+2*r*h,minn);
		}
	}
	dp[v][layer][lh][lr]=minn;
	return minn;
}
int main()
{
	int n,m,minns=999999999;
	cin>>n>>m;
	if(m==1)
	{
		for(int r=1;n/(r*r)>=1;r++)
		{
			if(n%(r*r)==0)
			{
				int h=n/(r*r);
				minns=min(minns,r*r+2*r*h);
			}
		}
		cout<<minns;
		return 0;
	}
	for(int i=1;i<=m;i++)
	{
		int r=i,h=i;
		minn_v[i]=minn_v[i-1]+r*r*h;
	}
	for(int r=m;n>=(r*r);r++)
	{
		for(int h=m;n-h*r*r>=minn_v[m-1];h++)
		{
			minns=min(minns, dfs(n-h*r*r,m-1,h,r) + r*r + 2*r*h);
		}
	}
	cout<<minns;
	return 0;
}

现在是wa,tle先不管。。。

2024/6/13 17:33
加载中...