RE on#1,#4求条
  • 板块题目总版
  • 楼主bayiran
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/24 14:15
  • 上次更新2025/7/24 17:04:59
查看原帖
RE on#1,#4求条
1509979
bayiran楼主2025/7/24 14:15

https://www.luogu.com.cn/problem/T148457

#include<bits/stdc++.h>
using namespace std;
int a[201],b[201],m,n,ans;
void dfs(int v,int s,int p,int r,int h){
    if(p==0){
        if(v==n&&s<ans){
            ans = s;
        }
	    return ;
    }
    if(r==0){
        return ;
    }
    if(v+b[p-1]>n || s+a[p-1]>ans || 2*(n-v)/r+s>=ans){
        return ;
    }
    else{
        for(int i=r-1;i>=p;i--){
            if(i==0){
                continue;
            }
            if(p==m){
                s = i*i;
            }
            int hh = min((n-v-b[p-1])/(i*i),h-1);
            for(int j=hh;j>=p;j--){
                dfs(v+i*i*j,s+2*i*j,p-1,i,j);
            }
        }
    }
    return ;
}
int main(){
    cin>>n>>m;
    if(m==0 || m==1){
        cout<<-1<<endl;
        return 0;
    }
    ans=2147483647;
	a[0]=b[0]=0;
	for(int i=1;i<201;i++){
        a[i]=a[i-1]+2*i*i;
	    b[i]=b[i-1]+i*i*i;
	}
	dfs(0,0,m,n+1,n+1);
	if(ans==2147483647){
        cout<<-1<<endl;
        return 0;
    }
	cout<<ans<<endl;
    return 0;
}
2025/7/24 14:15
加载中...