日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将功补过 树形动态规划

發布時間:2025/6/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将功补过 树形动态规划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意

?? 對于一個二叉樹,除根節點外,每個節點都有相應的一個權值。在此基礎上,求保留多少個點使得其仍然滿足樹的性質且權值總和最大。


分析

? 具體方法見:http://blog.csdn.net/a_loud_name/article/details/51326123


代碼


varf:array[0..200,0..200] of longint;a:array[0..200,1..3] of longint;b:array[0..200,0..200] of longint;v,num:array[0..200] of longint;i,j,k,l:longint;n,m,nm:longint;ans:longint;procedure make(v:longint); vari,j,k:longint; beginfor i:=1 to n dobeginif b[v,i]>0 thenbegina[v,1]:=i;num[i]:=b[v,i]-1;b[v,i]:=-1; b[i,v]:=-1;make(i);break;end;end;for i:=1 to n dobeginif b[v,i]>0 thenbegina[v,2]:=i;num[i]:=b[v,i]-1;b[v,i]:=-1; b[i,v]:=-1;make(i);break;end;end; end;procedure dfs(r,l:longint); vari,j,k:longint; beginif f[r,l]<>0 then exit;if l=0thenbeginf[r,l]:=0;exit;end;if (a[r,1]=0) and (a[r,2]=0)then beginf[r,l]:=num[r];exit;end;for i:=0 to l-1 dobegindfs(a[r,1],i);dfs(a[r,2],l-i-1);if f[r,l]<f[a[r,1],i]+f[a[r,2],l-i-1]+num[r]thenf[r,l]:=f[a[r,1],i]+f[a[r,2],l-i-1]+num[r];end; end;beginreadln(n,m,nm);m:=m+1;for i:=1 to n-1 dobeginreadln(j,k,l);b[j,k]:=l+1;b[k,j]:=l+1;end;fillchar(f,sizeof(f),0);fillchar(v,sizeof(v),0);fillchar(a,sizeof(a),0);v[0]:=1;make(1);dfs(1,m);if nm<=f[1,m] then writeln('TRUE')else writeln('FALSE');writeln(f[1,m]-nm); end.




轉載于:https://www.cnblogs.com/a-loud-name/p/6184822.html

總結

以上是生活随笔為你收集整理的将功补过 树形动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。