POJ1190&&洛谷P1731生 日 蛋糕

爆搜emm

代码

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans=1e9+7;
int S[25],V[25]; 
void dfs(int x,int s,int v,int r,int h)
{
	if (!x)
	{
		if (v==n) ans=min(ans,s);
		return ;
	}
    if (s+S[x]>ans||v+V[x]>n) return;
    if ((2*(n-v)/r+s)>=ans) return;
	for (int i=r-1;i>=x;i--)
	{
		if (x==m) s=i*i;
		int mh=min((n-V[x-1]-v)/(i*i),h-1);
		for (int k=mh;k>=x;k--) dfs(x-1,s+i*k*2,v+i*i*k,i,k);
	}			
	return ;
}
signed main()
{
	for (int i=1;i<=21;i++)
		S[i]=S[i-1]+i*i*2,V[i]=V[i-1]+i*i*i;
	cin>>n>>m;
	dfs(m,0,0,100,10000);
	if (ans==1e9+7) puts("");
	else cout<<ans;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/acerandaker/article/details/81103539