﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-From A Start,As An Acmer-随笔分类-DP</title><link>http://www.cppblog.com/aswmtjdsj/category/17254.html</link><description>My Way to Final</description><language>zh-cn</language><lastBuildDate>Mon, 31 Oct 2011 11:53:51 GMT</lastBuildDate><pubDate>Mon, 31 Oct 2011 11:53:51 GMT</pubDate><ttl>60</ttl><item><title>ZJU 3551 Bloodsucker 【简单概率dp】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 29 Oct 2011 10:42:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159321.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159321.html</trackback:ping><description><![CDATA[今天浙大月赛dp+数学专场。。俩小盆友不在，哥这个从来不写dp和数学的人表示很蛋疼。<br />很少写dp，很少写概率。哪怕写了一道水题也很高兴哇～<br />写一下吧～<br /><br />题目大意：<br />说你手里有n个生物，n-1个人，1个吸血鬼。每一天，你从这堆里面随机挑出两头来，如果是不同种，那么人就有p的概率会被同化为吸血鬼。<br />求一个期望，问给定n和p的情况下，所有人变吸血鬼的期望天数D。<br /><br />做法：<br />首先是要看出最基本的式子，就是在n个生物，n-x个人，x个吸血鬼的情况下抽出两头不同生物的概率：<br />假设分先后抽，那么先抽吸血鬼x / n , 后抽人 (n - x) / (n - 1) , 概率为 x * ( n - x) / (n * (n - 1))；先抽人 (n - x) / n , 后抽吸血鬼 x / (n - 1) , 概率为 x * (n - x) / (n * ( n - 1))。<br />所以th[x]（表示在n个生物，n-x个人，x个吸血鬼的情况下抽出两头不同生物的概率） = 2 * x * (n - x) / (n * (n - 1))。<br />然后就可以得出在某轮已有x个吸血鬼的前提下，吸血鬼数量增加1的概率为f[x] = th[x] * p 。而不变的概率则为g[x] = 1.0 - f[x]。<br />则可以建立如下概率转移图。Sx表示当前有x个吸血鬼。第k层的Sx的表示，到了第k-1天，有x个吸血鬼（的概率转移）。<br /><img src="http://www.cppblog.com/images/cppblog_com/aswmtjdsj/theory.jpg" border="0" alt="" width="1058" height="794" /><br /><br />所以可以看出Sx只和Sx-1和Sx本身有关。假设DP[x]表示由初始状态变成有x个吸血鬼所需天数的期望。<br />DP[x] = sigma(i = 1 to infinity)[f[x-1] * i * g[x-1] ^ (i - 1)]<br />而最终的期望即为所有期望之和ans = sigma(i=2 to n) DP[i]。<br />题目的关键就是DP[x]的求解，仔细观察这是一个等差乘等比的无穷级数求和，根据高中所学的错位相减法得到公式：<br />设Sn=DP[x],a=f[x-1],p=g[x-1]。则Sn-p*Sn=a+a*p+a*p^2....+a*p^n-1-n*a*p^n<br />Sn=[a*(1-p^n) - n*(1-p)*p^n]/(1-p)^2<br />lim(n-&gt;inf)Sn=a/(1-p)^2=1/a<br />所以最后的ans=sigma(1/a[i])=sigma(1.0/(2.0*p*i*(n-i)/(n*(n-1))))。<br />因为n在10^5级别，所以要用double乘，不然int会爆精度。<br /><br /><br />我也是可以做数学题的哈。<div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</div><div id="chromeVisExtension2PageDiv" style="display: none; ">forward sentence</div><span style="border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000; border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: groove; border-right-style: groove; border-bottom-style: groove; border-left-style: groove; position: absolute; z-index: 100000000000; min-height: 5px; border-top-left-radius: 7px 7px; border-top-right-radius: 7px 7px; border-bottom-right-radius: 7px 7px; border-bottom-left-radius: 7px 7px; display: none; top: 0px; min-width: 993px; max-width: 993px; left: 10px; right: 100px; background-color: #ffffff; "></span><div id="chromeVisBackground2LensDiv" style="display: none; " data-textcolor="#000000" data-bgcolor="#FFFFFF"></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-10-29 18:42 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 3883 CS and Sugar ［DP 以序消除后效性 树状数组快速统计］</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/31/152134.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sun, 31 Jul 2011 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/31/152134.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/152134.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/31/152134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/152134.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/152134.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><h1 style="color: #1a5cc8; text-align: center; ">CS and Sugar</h1><font><strong><span style="font-family: Arial; font-size: 12px; font-weight: bold; color: green; ">Time Limit: 3000/1000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 65768/32768 K (Java/Others)<br />Total Submission(s): 190&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 89<br /></span></strong></font><br /><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Problem Description</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; ">CS and Sugar find a new continent at the same time. Rare plants are all over this miraculous land, so they decided to take them home and sell it. But obviously, not all plants can be sold at a good price. Some plants are just usual weed. After some time of observation, they became self-taught botanists. CS and Sugar divided a rectangle area into n*m grids, and marked them with different values (maybe negative). They dig in turns to be fare, when all the plants in a grid are taken by the last person, and next person start to move on. The next person always chooses the one of the grids which are above and left to the last person, including the straight above or straight left. And even that, CS and Sugar still tried to compete with each other, and they always choose the available part with higher absolute value&nbsp;<font color="red">than last one</font>&nbsp;no matter positive or negative. The first person can choose any grid to begin. Until someone is not able to make any move, they left. They are now debating who should dig first because they have already calculated how many advantages the first person can get.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Input</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; ">Multiple test cases (no more than 100), for each case:<br />The first line contains two integers n and m (0&lt;n, m&lt;=100), representing the rectangle area was divided into n*m parts.<br />Following n lines, each line contains m integers whose absolute value is no more than 100, representing the value in each part.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Output</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; ">For each case, output one integer, representing the maximum advantage the first person can get in total value.</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Input</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">1 5
-5 -4 -3 -2 -1
2 2
-7 -6
-6 5
3 2
-6 -5
-4  -4
2  4</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Sample Output</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14px; "><div style="font-family: 'Courier New', Courier, monospace; ">1
4
3</div></pre></div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Author</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; ">zyue1105</div><div class="panel_bottom" style="height: auto; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: url(http://acm.hdu.edu.cn/images/panel-bottom.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">&nbsp;</div><br /><div class="panel_title" align="left" style="height: 38px; background-image: url(http://acm.hdu.edu.cn/images/panel-title.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; padding-top: 0px; padding-right: 14px; padding-bottom: 0px; padding-left: 14px; color: #7ca9ed; font-size: 18px; font-family: Arial; font-weight: bold; background-position: 0% 100%; background-repeat: no-repeat no-repeat; ">Source</div><div class="panel_content" style="height: auto; background-image: url(http://acm.hdu.edu.cn/images/panel-content.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; font-size: 14px; font-family: 'Times New Roman'; text-align: left; background-position: initial initial; background-repeat: no-repeat repeat; "><a href="http://acm.hdu.edu.cn/search.php?field=problem&amp;key=2011%20Multi-University%20Training%20Contest%205%20-%20Host%20by%20BNU&amp;source=1&amp;searchmode=source" style="color: #1a5cc8; text-decoration: none; ">2011 Multi-University Training Contest 5 - Host by BNU</a></div></span><br />链接：<a href="http://acm.hdu.edu.cn/showproblem.php?pid=3883">http://acm.hdu.edu.cn/showproblem.php?pid=3883</a><br />题意：两个那啥挖矿，轮流的。第一铲子落点任意自选。每一铲子的落点都要在上一铲子的&#8220;非严格&#8221;左上区间内，且格中value的绝对值要大于上一选格中value的绝对值。<br />两人都最优策略求自己最后总值最大。问最后的两人差值为多少。<br />解：<br />感谢ykprocess大神场上ac这题，赛后还给本菜讲题。YMYMYM！<br /><br />乍一看像博弈。也差不多确实是，不过在两人均最优策略的情况下，这题转化为一个DP了。<br />从末态向初态推，消后效性；每一步都选择上一步（其实是后一步）最大的那个dp值，减掉它，就是当前状态的最优解。<br />状态转移就是dp[x][y] = (max(1..x,1..y)dp[i][j] == -inf)?map[x][y]:map[x][y] - max;<br /><br />本题的两个特点，将读入的点全部排序，按照abs(val)降序&gt;x降序&gt;y降序排列。第一序保证了无后效性的关键，即先更新掉绝对值大的点，每次更新的时候就不用去判断当前点与查询出来的点绝对值大小关系了。后两个序其实没必要，只是保证了<span style="color: red; font-size: 14pt; "><strong>绝对值相同的点同时更新</strong></span>而已：这样就可以使得xy坐标大的点先更新，从而不会让绝对值相同的点互相更新，这样会导致错误的结果。感谢james0zan大神给本菜讲解了这个序的关键作用。YMYMYMYM！<br /><br />由于这题矩阵是100*100的。。所以如果每步naive的查询最大值，会让复杂度退化到O(100*4)的复杂度。所以果断上数据结构－－树状数组。二维树状数组使得查询最大值的复杂度降为(logn)^2。。所以该题的总复杂度为O(NM*log(N*M) + NM*log(N*M))=O(N^2*log^2(N))的。<br />二维树状数组查询最大值是第一次写，中间遇到不少困难。说几个要点：lowbit啥用不解释，更新结点最大值的时候是从小往大更新，因为当前结点会被x + lowbit(x) (&lt;=n)的这些点们所管辖(if val &gt; treearray[x][y] then update)。。而查询的时候则是从大往小查询，因为x - lowbit(x)管辖这些子矩阵中的最大值。<br /><br />另外因为是二维的。。所以千万不要这么写：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(;x&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;x&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;lowbit(x))<br /></span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(;y&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;y&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;lowbit(y))</span></div>这个太二了。。不解释。。一维这么写没关系。。二维就真的2b了。。。果断开个新变量啊少年，省代码会死啊。。。<br />还有初始化要用-inf。因为会有负数出现。<br /><br />代码附在这里：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstring</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;102</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;inf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">0u</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m,tr[maxn][maxn],dp[maxn][maxn],map[maxn][maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;bit(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x){</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x;}<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,y,val;<br />&nbsp;&nbsp;&nbsp;&nbsp;node(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;node(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_val):x(_x),y(_y),val(_val){}<br />}no[maxn&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ab(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(x&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)</span><span style="color: #000000; ">?</span><span style="color: #000000; ">x:</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x;}<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.val&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;b.val&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;(a.val&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;b.val&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;a.x&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;b.x)&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;(a.val&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;b.val&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;a.x&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;b.x&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;a.y&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;b.y);<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">inf;<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;mod(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;val)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;i&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;bit(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;y;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;j&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;bit(j))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(tr[i][j]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;val)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;val;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x;i&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;bit(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;y;j&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;j&nbsp;</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">&nbsp;bit(j))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ans&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;tr[i][j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tr[i][j];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ans;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">map[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;node(i,j,ab(map[i][j]));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(no,no&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;cnt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;cnt;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;no[i].x,y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;no[i].y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find(x,y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(temp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">inf)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[x][y]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;map[x][y];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[x][y]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;map[x][y]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod(x,y,dp[x][y]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">inf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;m;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ans&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;dp[i][j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dp[i][j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">Backspace</div><div id="chromeVisExtension2PageDiv" style="display: none; ">backward paragraph</div><div id="chromeVisBackground2LensDiv" style="display: none; " data-textmag="0.000127605887595352" data-textcolor="#000000" data-bgcolor="#ffffff"></div><span style="background-color: #ffffff; border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000; border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: groove; border-right-style: groove; border-bottom-style: groove; border-left-style: groove; position: absolute; z-index: 100000000000; min-height: 5px; border-top-left-radius: 7px 7px; border-top-right-radius: 7px 7px; border-bottom-right-radius: 7px 7px; border-bottom-left-radius: 7px 7px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; font-style: normal; color: #000000; text-decoration: none; text-align: left; line-height: 1.2; "><div style="font-size: 0.012760588759535198%; "></div></div></span><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/152134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-07-31 12:14 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/31/152134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 3899 JLUCPC ［树形DP］（好多坑爹之处）</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/29/152041.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 29 Jul 2011 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/29/152041.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/152041.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/29/152041.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/152041.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/152041.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JLUCPCTime Limit: 15000/5000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 233&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 37Proble...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/07/29/152041.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/152041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-07-29 15:21 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/29/152041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 1985 Cow Marathon &amp; HDU 2196 Computer 【简单树形dp - 树的直径】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/09/150519.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 09 Jul 2011 03:07:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/09/150519.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/150519.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/09/150519.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/150519.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/150519.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我蒟蒻啊，对于树形dp的理解还很浅显，先把初步的几道题理解记录一下。dp要找最优子结构，它的状态转移就要有一个序。树上的dp同样，无非是按照树的生长方向或逆方向进行dp。对于所谓根-叶，叶-根，这两个概念还没有特别明确的认识。单就这两道题而言，无非是某节点到其所有后继节点的状态转移。poj1985 是 求 树的直径。可以随便选择一个点开始进行bfs或者dfs，从而找到离该点最远的那个点（可以证明，...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/07/09/150519.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/150519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-07-09 11:07 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/09/150519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>