pascal 生日蛋糕问题
programcgb;
n,m,r,h,i:longint;
opt:longint;
minv:array[0..20]oflongint;
functIonmin(a,b:longint):longint;
begin
ifa
functionmax(a,b:longint):longint;
begin
ifa>bthenmax:=aelsemax:=b;
functionmaxv(r,h,k:longint):longint;
vari:longint;
begin
maxv:=0;
fori:=1tokdo
begin
dec(r);dec(h);
if(r<1)or(h<1)thenexit;
inc(maxv,r*r*h);
proceduredfs(k,lr,lh,s,n:longint);
varr,h,e,v,s1:longint;
begin
ifk=0then
begin
ifn=0thenopt:=s;
exit;
forr:=lr-1downtokdo
begin
e:=min(nDIv(r*r),lh-1);
forh:=edowntokdo
begin
v:=n-r*r*h;
s1:=s+2*r*h;
if(v>0)or((k=1)and(v=0))then
if(maxv(r,h,k-1)>=v)and(minv[k-1]<=v)and(s1
dfs(k-1,r,h,s1,v);
begin
repeat
opt:=maxlongint;
readln(n,m);
r:=0;h:=0;minv[0]:=0;
fori:=1tomdo
begin
inc(r);inc(h);
minv[i]:=minv[i-1]+r*r*h;
forr:=trunc(sqrt(ndivm))downtomdo
forh:=ndiv(r*r)downtomdo
if2*r*h+r*r
dfs(m-1,r,h,2*r*h+r*r,n-r*r*h);
writeln(opt);
untilseekeof;
本回答由提问者推荐
切蛋糕C++编程求解答
a,b,c从小到大重新排列,
以下讨论假定a<=b<=c,也就是已经排列完成。
两个零的情况:
如果a=0,b=0,那么c肯定大于0,输出切0刀。
一个零的情况:
如果a=0,0
如果a=0,0
没有零的情况:
如果0
如果a+b==c输出切两刀
其他输出切三刀。