这题我有剪枝了,为啥还是20分呢,有木有大佬帮我康康,谢啦

P1731 [NOI1999] 生日蛋糕

@[游走的灵魂](/user/284521) 大哥把注释删掉
by DeepWinter @ 2022-03-18 08:04:28


@祝君
by Forebear @ 2022-03-18 09:19:23


```cpp #include<bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f; } int n,m,a[21],b[21],minn=1e8,mr=-1e8; void dfs(int x,int v,int q,int pr,int ph) //x:层数 v:当前体积 q:当前表面积 { int i,j; if(x==0 && v==n) { minn=min(q,minn); return; } else if(v==n || x==0) { return; } if(v+b[x-1]>n) return; if(q+a[x-1]>=minn) return; for(i=pr-1;i>=x;i--) { int s=i*i; for(j=ph-1;j>=x;j--) { dfs(x-1,v+i*i*j,q+2*i*j,i,j); } } } int main() { int i,j; n=read(); m=read(); for(i=1;i<=m;i++) { a[i]=a[i-1]+2*i*i; b[i]=b[i-1]+i*i*i; } for(i=1;i<=28;i++) { if(i*i*1>n) break; for(j=1;j<=28;j++) { if(i*i*j>n) break; else dfs(m-1,i*i*j,2*i*j+i*i,i,j); } } if(minn==1e8) { printf("%d",0); return 0; } printf("%d",minn); return 0; } ```
by queen_street @ 2022-03-18 11:08:21


~~这题的灵魂在于增强版是绿题,而原题是蓝题~~
by Monomial @ 2022-03-18 21:16:04


@[_Shu](/user/556013) 原题也降绿了。
by Network_Error @ 2022-07-11 19:32:56


|