<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 小胖守皇宫</title>
	<atom:link href="https://www.phppan.com/tag/%e5%b0%8f%e8%83%96%e5%ae%88%e7%9a%87%e5%ae%ab/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>小胖守皇宫（Tree dynamic）</title>
		<link>https://www.phppan.com/2009/09/tree-dynamic/</link>
		<comments>https://www.phppan.com/2009/09/tree-dynamic/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 10:27:17 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[DP]]></category>
		<category><![CDATA[dynamic programming]]></category>
		<category><![CDATA[Tree dynamic]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[小胖守皇宫]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=98</guid>
		<description><![CDATA[问题描述 huyichen世子事件后，xuzhenyi成了皇上特聘的御前一品侍卫。 皇宫以午门为起点，直到后宫 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>问题描述</strong><br />
huyichen世子事件后，xuzhenyi成了皇上特聘的御前一品侍卫。</p>
<p>皇宫以午门为起点，直到后宫嫔妃们的寝宫，呈一棵树的形状；某些宫殿间可以互相望见。大内保卫森严，三步一岗，五步一哨，每个宫殿都要有人全天候看守，在不同的宫殿安排看守所需的费用不同。<br />
可是xuzhenyi手上的经费不足，无论如何也没法在每个宫殿都安置留守侍卫。<br />
帮助xuzhenyi布置侍卫，在看守全部宫殿的前提下，使得花费的经费最少。</p>
<p><strong>输入格式 Input Format </strong></p>
<p>输入文件中数据表示一棵树，描述如下：<br />
第1行 n，表示树中结点的数目。<br />
第2行至第n+1行，每行描述每个宫殿结点信息，依次为：该宫殿结点标号i（0 对于一个n（0 &lt; n &lt;= 1500）个结点的树，结点标号在1到n之间，且标号不重复。<br />
<strong>输出格式 Output Format </strong><br />
输出文件仅包含一个数，为所求的最少的经费。</p>
<p><strong>样例输入 Sample Input </strong><br />
6<br />
1 30 3 2 3 4<br />
2 16 2 5 6<br />
3 5 0<br />
4 4 0<br />
5 11 0<br />
6 5 0</p>
<p><strong>样例输出 Sample Output </strong></p>
<p>25</p>
<p>注释 Hint</p>
<p>如图</p>
<p>算法分析<br />
树型动态规划<br />
本题既可以用有向树来做,也可以用无向图随机选根结点</p>
<p>分析可见,对于当前结点i,它有num个子结点,它有它有3种状态:</p>
<p>1:在当前位放置守卫的情况(被自己所控制)<br />
2:不在当前位放置守卫,但是它已经被它的子结点所控制<br />
3:不在当前位放置守卫,它还没有被它的子结点所影响(即被其父结点控制)</p>
<p>用f[i,x]表示结点i的第x种情况:</p>
<p>1情况的值由其子结点的1,2,3情况得到最优<br />
2情况的值由其子结点的1,2情况得到最优<br />
3情况的值只可由其2情况求和.</p>
<p>第2种情况要特别注意,要求它的子结点中必须有一个是1状况的,所以可以先将最小值求和,<br />
然后加上这num个子结点中每个的1情况与最优情况的f值之差&#8211;most</p>
<p>方程:<br />
f[i,1]:=Σ(min{f[son[j],1],f[son[j],2],f[son[j],3]})+a[i]<br />
f[i,2]:=Σ(min{f[son[j],1],f[son[j],2]})+most<br />
f[i,3]:=Σ(f[son[j],2]),　　　　　　　　　　 1&lt;=j&lt;=num</p>
<p>还有要注意的一点就是对于极限数据,树被拉成了一条链.<br />
有向图解法如果每次递归都开一个数组那么内存会爆,对此,可以不用数组记录子结点,而直接用链表就<br />
可以大大节约空间了.甚至把数组改成全局变量也是可行的,就是注意递归调用要在DP之前.</p>
<p>【代码】</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include </span>
<span style="color: #339933;">#define MAXN 1501</span>
<span style="color: #339933;">#define MAXINT 2000000000</span>
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">int</span> v<span style="color: #339933;">,</span> num<span style="color: #339933;">;</span>
        <span style="color: #993333;">int</span> child<span style="color: #009900;">&#91;</span>MAXN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>node<span style="color: #339933;">;</span>
&nbsp;
node a<span style="color: #009900;">&#91;</span>MAXN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> f<span style="color: #009900;">&#91;</span>MAXN<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> min2<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> x<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> y<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
       <span style="color: #b1b100;">return</span> x</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2009/09/tree-dynamic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
