MnZn求助 TLE T148457
  • 板块灌水区
  • 楼主233小问号
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/7/18 17:16
  • 上次更新2023/11/4 14:16:32
查看原帖
MnZn求助 TLE T148457
332486
233小问号楼主2021/7/18 17:16
#pragma comment(linker, "/STACK:1073741824")
#include<bits/stdc++.h>
using namespace std;
int v_max[21],s_max[21],n,m,ans=1e8;//省略Pi 
void dfs(int used_v,int used_s,int dp,int r,int h)
{ 
	if(dp==0)
	{
		if(used_v==n)
			ans=used_s;
		return;
	}
	if(used_s+s_max[dp-1]>ans) return;
	if(used_v+v_max[dp-1]>n)	return;
	if(((n-used_v)<<1)/r+used_s >=ans)  return;
	for(int i=r-1;i>=dp;--i)
	{
		int pow_i=i*i;
		if(dp==m)	used_s=pow(i,2);
		int cache=min((n-used_v-v_max[dp-1])/pow_i,h-1);
		for(int j=cache;j>=dp;--j)
			dfs(used_v+pow_i*j,used_s+((i*j)<<1),dp-1,i,j);
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m+1;i++)
	{
		v_max[i]=v_max[i-1]+pow(i,3);
		s_max[i]=s_max[i-1]+((i*i)<<1);
	}	
	dfs(0,0,m,sqrt(n),n);
	if(ans==1e8)
		cout<<-1<<endl;
	else
		cout<<ans<<endl;
	return 0;
}

https://www.luogu.com.cn/problem/solution/P1731

2021/7/18 17:16
加载中...