90求调
查看原帖
90求调
528740
lonely_star楼主2024/8/1 14:49
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2*1e5+2;
long long ans;
long long s[maxn],v[maxn];
long long n,m;
void dfs(long long now,long long r,long long h,long long ss,long long vv){
	long long flag;
	flag=h;
	if(ss+s[now-1]>=ans||vv+v[now-1]>n||2*(n-vv)/r+ss>=ans){
		return;
	}
	if(now==0){
		if(vv==n){
			ans=min(ans,ss); 
		}
		return;
	}
	for(long long i=r-1;i>=now;i--){
		if(now==m){
			ss=i*i;
		}
		flag=min(h-1,n-v[now-1]/(i*i));
		for(long long j=flag;j>=now;j--){
			dfs(now-1,i,j,ss+2*i*j,vv+i*i*j);
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(long long i=1;i<=m;i++){
		s[i]=s[i-1]+2*i*i;
		v[i]=v[i]+i*i*i;
	}
	ans=0x3f3f3f3f3f3f;
	dfs(m,n,n,0,0);
	if(ans>0x3f3f3f3f3f){
		cout<<0;
	}else{
		cout<<ans;
	}
	return 0;
}

90分 TLE一个点 qiutiao(:~^~:)

2024/8/1 14:49
加载中...