蒟蒻求助
查看原帖
蒟蒻求助
175801
黑虎阿福楼主2020/8/12 22:28

蒟蒻求助

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,minv[30],mins[30],a,b,y=99999,maxh;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void search(int d,int v,int s,int r,int h){
	if(v<minv[d-1]||s+mins[d-1]>=y||v/r*2+s>=y)
	return;
	if(d==0){
		if(v==0)
		y=min(y,s);
		return;
	}
	for(a=r-1;a>=d;a--){
		maxh=min(h-1,(v-minv[d-1])/(a*a));
		for(b=maxh;b>=d;b--){
			if(d==m)
			search(d-1,v-a*a*b,s+a*a+2*a*b,a,b);
			else
			search(d-1,v-a*a*b,s+2*a*b,a,b);
		}
	}
}
int main(){
	n=read();
	m=read();
	for(a=1;a<=m;a++){
		minv[a]=minv[a-1]+a*a*a;
		mins[a]=mins[a-1]+2*a*a;
	}
	search(m,n,0,sqrt(n/m),n/(m*m));
	cout<<y;
	return 0;
}
2020/8/12 22:28
加载中...