SUBTASK2第二组数据WA求助
查看原帖
SUBTASK2第二组数据WA求助
726902
bcbgszyzh楼主2024/4/20 20:49
#include<bits/stdc++.h>
using namespace std;
//定义变量!!!
int r[30],h[30],minn=INT_MAX,n,m;
void dfs(int x,int y,int k,int z){
    //六个剪枝!!!
    if(y<0)return;
    if(x>m+1)return;
    if(k>=minn)return;
    if(y==0&&x==m+1){
        k+=r[1]*r[1];
        if(k<minn)minn=k;
        return;
    }
    if(k+z+r[1]*r[1]>minn)return;
    if(y-(r[x-1])*(r[x-1])*(h[x-1])*z>0)return;
    //开始搜索!!!
    for(int i=r[x-1]-1;i>=z;--i){
        for(int j=h[x-1]-1;j>=z;--j){
            if(y-i*i*j>=0&&x+1<=m+1){
                r[x]=i;
                h[x]=j;
                dfs(x+1,y-i*i*j,k+(i*2*j),z-1);
                h[x]=0,r[x]=0;
            }
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    r[0]=(int)sqrt(n);
    h[0]=(int)sqrt(n);
    dfs(1,n,0,m);
    if(minn==INT_MAX)printf("0");
    else printf("%d",minn);
    return 0;
}
2024/4/20 20:49
加载中...