Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
你贴的代码里d数组是什么意思?In Reply To:Re:二维数组,树形dp,背包转移 Posted by:lydrainbowcat at 2011-07-13 22:21:36 > var > a,f,d:array[0..150,0..150]of longint; > v:array[0..150]of boolean; > n,m,i,j,x,y,root,ans:longint; > > procedure treedp(x:longint); > var > i,j,k:longint; > begin > for i:=1 to a[x,0] do treedp(a[x,i]); > fillchar(d,sizeof(d),127); > d[0,0]:=0; > for i:=1 to a[x,0] do > begin > for j:=0 to m do > if d[i-1,j]<n then d[i,j]:=d[i-1,j]+1; > for j:=1 to m do > if f[a[x,i],j]<n then > for k:=0 to m-j do > if (d[i-1,k]<n)and(d[i-1,k]+f[a[x,i],j]<d[i,k+j]) then > d[i,k+j]:=d[i-1,k]+f[a[x,i],j]; > end; > for j:=m-1 downto 0 do > if d[i,j]<n then d[i,j+1]:=d[i,j]; > if a[x,0]=0 then f[x,1]:=0; > for j:=1 to m do > if f[x,j]>d[i,j] then f[x,j]:=d[i,j]; > if x=root then > if ans>f[x,m] then ans:=f[x,m] else > else if ans>f[x,m]+1 then ans:=f[x,m]+1; > end; > > begin > readln(n,m); > for i:=1 to n-1 do > begin > readln(x,y); > inc(a[x,0]); > a[x,a[x,0]]:=y; > v[y]:=true; > end; > for i:=1 to n do if not v[i] then root:=i; > fillchar(f,sizeof(f),127); > ans:=n; > treedp(root); > writeln(ans); > end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator