﻿<?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++博客-alpc60 ACM/ICPC程序设计-随笔分类-ACM/ICPC</title><link>http://www.cppblog.com/linyangfei/category/5206.html</link><description>成长的路……源</description><language>zh-cn</language><lastBuildDate>Thu, 25 Sep 2008 12:09:27 GMT</lastBuildDate><pubDate>Thu, 25 Sep 2008 12:09:27 GMT</pubDate><ttl>60</ttl><item><title>树状数组学习心得</title><link>http://www.cppblog.com/linyangfei/archive/2008/09/24/62688.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Wed, 24 Sep 2008 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/09/24/62688.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/62688.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/09/24/62688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/62688.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/62688.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;POJ 3321 Apple Treehttp://acm.pku.edu.cn/JudgeOnline/problem?id=3321POJ 2481 Cowshttp://acm.pku.edu.cn/JudgeOnline/problem?id=2481POJ 2155 Matrixhttp://acm.pku.edu.cn/JudgeOnline/pro...&nbsp;&nbsp;<a href='http://www.cppblog.com/linyangfei/archive/2008/09/24/62688.html'>阅读全文</a><img src ="http://www.cppblog.com/linyangfei/aggbug/62688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-09-24 16:35 <a href="http://www.cppblog.com/linyangfei/archive/2008/09/24/62688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数学中的爆搞题</title><link>http://www.cppblog.com/linyangfei/archive/2008/09/19/62306.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Fri, 19 Sep 2008 13:23:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/09/19/62306.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/62306.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/09/19/62306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/62306.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/62306.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;今天上网随便逛逛，无意间看到这些题目颇为熟悉，要是当年中学数学考试的时候能够拿电脑编程就好了。<br><br>1）江海市电话号码是5位数，每一位上的数码可以是0，1，2&#183;&#183;&#183;8，9中任意一个（数字可以重复出现，如00000也算一个电话号码），那么这个城市最多有多少个电话号码？ <br>（2）用0，1，2，3这4个数字，可以组成多少个没有重复的4位数？ <br>（3）&#8220;IMO&#8221;是国际奥林匹克的缩写，把3个字母写成3种不同的颜色，现在有5种不同的颜色笔，按上述要求能写出多少种不同颜色搭配的&#8220;IMO&#8221;.<br><br>答案是<span style="COLOR: #ffffff">：(1) 100000种&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）18种&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）60种<br></span><br><br></cd>不过好像人脑要比爆搞更快些&#8230;&#8230;ft<img src ="http://www.cppblog.com/linyangfei/aggbug/62306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-09-19 21:23 <a href="http://www.cppblog.com/linyangfei/archive/2008/09/19/62306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小点覆盖 POJ 2060 Taxi Cab Scheme</title><link>http://www.cppblog.com/linyangfei/archive/2008/09/15/61878.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 15 Sep 2008 11:46:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/09/15/61878.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/61878.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/09/15/61878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/61878.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/61878.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>Taxi Cab Scheme</span></strong></p>
<div align=center>
<table cellPadding=0 border=0>
    <tbody>
        <tr>
            <td>
            <p><strong><span>Time Limit:</span></strong><span> 1000MS</span></p>
            </td>
            <td width=10>
            <p>&nbsp;</p>
            </td>
            <td>
            <p><strong><span>Memory Limit:</span></strong><span> 30000K</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong><span>Total Submissions:</span></strong><span> 1342</span></p>
            </td>
            <td width=10>
            <p>&nbsp;</p>
            </td>
            <td>
            <p><strong><span>Accepted:</span></strong><span> 587</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><span>Description</span></p>
<p><span>Running a taxi station is not all that simple. Apart from the obvious demand for a centralised coordination of the cabs in order to pick up the customers calling to get a cab as soon as possible,there is also a need to schedule all the taxi rides which have been booked in advance.Given a list of all booked taxi rides for the next day, you want to minimise the number of cabs needed to carry out all of the rides. <br>For the sake of simplicity, we model a city as a rectangular grid. An address in the city is denoted by two integers: the street and avenue number. The time needed to get from the address a, b to c, d by taxi is |a - c| + |b - d| minutes. A cab may carry out a booked ride if it is its first ride of the day, or if it can get to the source address of the new ride from its latest,at least one minute before the new ride's scheduled departure. Note that some rides may end after midnight.</span></p>
<p><span>Input</span></p>
<p><span>On the first line of the input is a single positive integer N, telling the number of test scenarios to follow. Each scenario begins with a line containing an integer M, 0 &lt; M &lt; 500, being the number of booked taxi rides. The following M lines contain the rides. Each ride is described by a departure time on the format hh:mm (ranging from 00:00 to 23:59), two integers a b that are the coordinates of the source address and two integers c d that are the coordinates of the destination address. All coordinates are at least 0 and strictly smaller than 200. The booked rides in each scenario are sorted in order of increasing departure time.</span></p>
<p><span>Output</span></p>
<p><span>For each scenario, output one line containing the minimum number of cabs required to carry out all the booked taxi rides.</span></p>
<p><span>Sample Input</span></p>
<pre><span>2</span></pre>
<pre><span>2</span></pre>
<pre><span>08:00 10 11 9 16</span></pre>
<pre><span>08:07 9 16 10 11</span></pre>
<pre><span>2</span></pre>
<pre><span>08:00 10 11 9 16</span></pre>
<pre><span>08:06 9 16 10 11</span></pre>
<p><span>Sample Output</span></p>
<pre><span>1</span></pre>
<pre><span>2</span></pre>
<p><span>Source</span></p>
<p><span><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=Northwestern+Europe+2004">Northwestern Europe 2004</a></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>根据这道题目的意思，我们可以建一张图，对于两个</span><span>booked taxi ride</span><span>，</span><span>ri</span><span>和</span><span>rj</span><span>如果一辆车能够先完成</span><span>ri</span><span>的任务再有时间赶去完成</span><span>rj</span><span>的任务，那么就建立一条</span><span>ri</span><span>指向</span><span>rj</span><span>的边。<br></span></p>
<p><img height=178 alt="" src="http://www.cppblog.com/images/cppblog_com/linyangfei/1.JPG" width=313 border=0><span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>按照题目的要求，要选择最少的</span><span>taxi</span><span>来完成这些任务。显然在上面这个例子中，需要安排</span><span>2</span><span>辆</span><span>taxi</span><span>。结合这个图，可以把题目的要求转化为找出最少的路径条数，使得这些路径覆盖途中所有的边，例如可以选择</span><span>2</span><span>条路径</span><span>1-&gt;3-&gt;4</span><span>和</span><span>1-&gt;2</span><span>就可以覆盖所有的边。也可以选择</span><span>1-&gt;3-&gt;4</span><span>和</span><span>2</span><span>（因为</span><span>2</span><span>作为初始站，不需要由</span><span>1</span><span>转移过来）。对于一条连续的路径</span><span>vi1-&gt;vi2-&gt;&#8230;vik</span><span>由于这条路径上的任务实际上是由一辆</span><span>taxi</span><span>来完成的，可以吧这条路径退化成两个点</span><span>vi1-&gt;vik</span><span>。有了这两步建图的步骤以后，问题的求解就可以变为找出顶点集的一个最小子集，使这个顶点子集覆盖所有的边（每条边都至少和一个顶点集的顶点相连）。这个问题就是图的最小点覆盖。再看这张图，还有一些性质能够让我们更好地求出最小点覆盖。这个图是一个有向无环图，没有自环，就可以拆点，把原先建的图变成一张二分图。<br><img height=247 alt="" src="http://www.cppblog.com/images/cppblog_com/linyangfei/2.JPG" width=424 border=0><br></span></p>
<p><span>可以再图中看出，上面举出的一条路径</span><span>1-&gt;3-&gt;4</span><span>对应了这个二分图中的路径</span><span>1-&gt;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="3" UnitName="&#8217;">3&#8217;</st1:chmetcnv>-&gt;3-&gt;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="4" UnitName="&#8217;">4&#8217;</st1:chmetcnv></span><span>，在这个二分图中就需要求一个最大独立子集（这里的</span><span>4</span><span>点就是一条路径的终点，没一条路径即对应有一个终点！）。二分图的最大独立数是总点数与最大匹配数的差值。接下来建图，拆点，求二分图最大匹配就能解决这道题目了。<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_194553 onclick="this.style.display='none'; Code_Closed_Text_194553.style.display='none'; Code_Open_Image_194553.style.display='inline'; Code_Open_Text_194553.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_194553 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_194553.style.display='none'; Code_Closed_Image_194553.style.display='inline'; Code_Closed_Text_194553.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_194553 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id=Code_Open_Text_194553 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;Point<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_95_107_Open_Image onclick="this.style.display='none'; Codehighlighter1_95_107_Open_Text.style.display='none'; Codehighlighter1_95_107_Closed_Image.style.display='inline'; Codehighlighter1_95_107_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_95_107_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_107_Closed_Text.style.display='none'; Codehighlighter1_95_107_Open_Image.style.display='inline'; Codehighlighter1_95_107_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_95_107_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_95_107_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,y;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;P<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_119_152_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_152_Open_Text.style.display='none'; Codehighlighter1_119_152_Closed_Image.style.display='inline'; Codehighlighter1_119_152_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_119_152_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_152_Closed_Text.style.display='none'; Codehighlighter1_119_152_Open_Image.style.display='inline'; Codehighlighter1_119_152_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_119_152_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_152_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s,e;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;Point&nbsp;s1,s2;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">p[</span><span style="COLOR: #000000">505</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,g[</span><span style="COLOR: #000000">505</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">505</span><span style="COLOR: #000000">],match[</span><span style="COLOR: #000000">505</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;chk[</span><span style="COLOR: #000000">505</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_207_252_Open_Image onclick="this.style.display='none'; Codehighlighter1_207_252_Open_Text.style.display='none'; Codehighlighter1_207_252_Closed_Image.style.display='inline'; Codehighlighter1_207_252_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_207_252_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_207_252_Closed_Text.style.display='none'; Codehighlighter1_207_252_Open_Image.style.display='inline'; Codehighlighter1_207_252_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_207_252_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_207_252_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">int&nbsp;abs(int&nbsp;a)<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;&lt;&nbsp;0&nbsp;?&nbsp;-a&nbsp;:&nbsp;a;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;P&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;P&nbsp;b)<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img id=Codehighlighter1_292_313_Open_Image onclick="this.style.display='none'; Codehighlighter1_292_313_Open_Text.style.display='none'; Codehighlighter1_292_313_Closed_Image.style.display='inline'; Codehighlighter1_292_313_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_292_313_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_292_313_Closed_Text.style.display='none'; Codehighlighter1_292_313_Open_Image.style.display='inline'; Codehighlighter1_292_313_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_292_313_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_292_313_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a.s&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;b.s;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dfs(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v)<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id=Codehighlighter1_330_508_Open_Image onclick="this.style.display='none'; Codehighlighter1_330_508_Open_Text.style.display='none'; Codehighlighter1_330_508_Closed_Image.style.display='inline'; Codehighlighter1_330_508_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_330_508_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_330_508_Closed_Text.style.display='none'; Codehighlighter1_330_508_Open_Image.style.display='inline'; Codehighlighter1_330_508_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_330_508_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_330_508_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,t;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img id=Codehighlighter1_363_495_Open_Image onclick="this.style.display='none'; Codehighlighter1_363_495_Open_Text.style.display='none'; Codehighlighter1_363_495_Closed_Image.style.display='inline'; Codehighlighter1_363_495_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_363_495_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_363_495_Closed_Text.style.display='none'; Codehighlighter1_363_495_Open_Image.style.display='inline'; Codehighlighter1_363_495_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_363_495_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_363_495_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">chk[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;g[v][i])<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id=Codehighlighter1_392_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_392_492_Open_Text.style.display='none'; Codehighlighter1_392_492_Closed_Image.style.display='inline'; Codehighlighter1_392_492_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_392_492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_492_Closed_Text.style.display='none'; Codehighlighter1_392_492_Open_Image.style.display='inline'; Codehighlighter1_392_492_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_392_492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_392_492_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">match[i];<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chk[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(t&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;dfs(t))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Twomatch()<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id=Codehighlighter1_525_666_Open_Image onclick="this.style.display='none'; Codehighlighter1_525_666_Open_Text.style.display='none'; Codehighlighter1_525_666_Closed_Image.style.display='inline'; Codehighlighter1_525_666_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_525_666_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_525_666_Closed_Text.style.display='none'; Codehighlighter1_525_666_Open_Image.style.display='inline'; Codehighlighter1_525_666_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_525_666_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_525_666_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(match,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(match));<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img id=Codehighlighter1_595_651_Open_Image onclick="this.style.display='none'; Codehighlighter1_595_651_Open_Text.style.display='none'; Codehighlighter1_595_651_Closed_Image.style.display='inline'; Codehighlighter1_595_651_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_595_651_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_595_651_Closed_Text.style.display='none'; Codehighlighter1_595_651_Open_Image.style.display='inline'; Codehighlighter1_595_651_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_595_651_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_595_651_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(chk,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(chk));<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(i))&nbsp;ans</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ans;<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img id=Codehighlighter1_680_1308_Open_Image onclick="this.style.display='none'; Codehighlighter1_680_1308_Open_Text.style.display='none'; Codehighlighter1_680_1308_Closed_Image.style.display='inline'; Codehighlighter1_680_1308_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_680_1308_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_680_1308_Closed_Text.style.display='none'; Codehighlighter1_680_1308_Open_Image.style.display='inline'; Codehighlighter1_680_1308_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_680_1308_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_680_1308_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,cases,a,b,j,cnt;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;temp[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">freopen("in.txt","r",stdin);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&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">cases);<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cases</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img id=Codehighlighter1_792_1295_Open_Image onclick="this.style.display='none'; Codehighlighter1_792_1295_Open_Text.style.display='none'; Codehighlighter1_792_1295_Closed_Image.style.display='inline'; Codehighlighter1_792_1295_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_792_1295_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_792_1295_Closed_Text.style.display='none'; Codehighlighter1_792_1295_Open_Image.style.display='inline'; Codehighlighter1_792_1295_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_792_1295_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_792_1295_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">n);<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img id=Codehighlighter1_836_1048_Open_Image onclick="this.style.display='none'; Codehighlighter1_836_1048_Open_Text.style.display='none'; Codehighlighter1_836_1048_Closed_Image.style.display='inline'; Codehighlighter1_836_1048_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_836_1048_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_836_1048_Closed_Text.style.display='none'; Codehighlighter1_836_1048_Open_Image.style.display='inline'; Codehighlighter1_836_1048_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_836_1048_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_836_1048_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,temp);<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].s1.x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].s1.y,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].s2.x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].s2.y);<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sscanf(temp,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%*[:]%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b);<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b;<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].e</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i].s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">abs(p[i].s2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[i].s1.x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">abs(p[i].s2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[i].s1.y);<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">sort(p,p+n);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">73</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(g,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(g));<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img id=Codehighlighter1_1124_1260_Open_Image onclick="this.style.display='none'; Codehighlighter1_1124_1260_Open_Text.style.display='none'; Codehighlighter1_1124_1260_Closed_Image.style.display='inline'; Codehighlighter1_1124_1260_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1124_1260_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1124_1260_Closed_Text.style.display='none'; Codehighlighter1_1124_1260_Open_Image.style.display='inline'; Codehighlighter1_1124_1260_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1124_1260_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1124_1260_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img id=Codehighlighter1_1151_1256_Open_Image onclick="this.style.display='none'; Codehighlighter1_1151_1256_Open_Text.style.display='none'; Codehighlighter1_1151_1256_Closed_Image.style.display='inline'; Codehighlighter1_1151_1256_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1151_1256_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1151_1256_Closed_Text.style.display='none'; Codehighlighter1_1151_1256_Open_Image.style.display='inline'; Codehighlighter1_1151_1256_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1151_1256_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1151_1256_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">(p[i].e</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">abs(p[i].s2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[j].s1.x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">abs(p[i].s2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[j].s1.y)&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;p[j].s&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;j)<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">,n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Twomatch());<br></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">85</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">86</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">87</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></span></div>
<p><br></span></p><img src ="http://www.cppblog.com/linyangfei/aggbug/61878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-09-15 19:46 <a href="http://www.cppblog.com/linyangfei/archive/2008/09/15/61878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从希望走向失望</title><link>http://www.cppblog.com/linyangfei/archive/2008/08/29/60388.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Fri, 29 Aug 2008 10:43:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/08/29/60388.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/60388.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/08/29/60388.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/60388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/60388.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;今早上完&#8220;计算机图形图像&#8221;课后，我这个学期唯一的希望都破灭了（这学期得睡过去了）。我一直都觉</p>
<p>得&#8220;计算机图形学&#8221;和&#8220;计算机图像处理&#8221;是两门很有意思的课程。这学期我们的课程安排还是一贯作风</p>
<p>——课程压缩，把这两门课程压成了一门课程，不仅如此还使用的是内部教材（传说中的内部教材就是把</p>
<p>课程内容进一步精简压缩）。即便在这种情况之下，我还是对计算机图形图像处理充满热情，想多学些东</p>
<p>西，好好地做课程设计。今天临下课前，老师把课程设计的题目布置下来，真令我彻底失望了。布置了20+</p>
<p>个题目，虽说涉及一些军事，但是要求真的很水。后面给出了一系列军事电影，灾难电影大片，做法就是</p>
<p>：<br>1、看片；<br>2、截图与PS；<br>3、写报告与做ppt。<br>&nbsp;&nbsp;&nbsp;我想了一下，这里面可能一点理论，一点编程都不会涉及到，这样的课程设计，玩过电脑的人都会做，还</p>
<p>干嘛添在&#8220;信息工程&#8221;专业的&#8220;课程设计&#8221;里呢？真是可笑！！！课程都缩水缩到这种程度了，那还开什</p>
<p>么课呢，自欺欺人罢了。稍有点本专业知识的人也不至于会认为计算机图像处理就是玩PS吧。那大学里学</p>
<p>电子工程的毕业后都去修微波炉，通信工程的去卖电话卡，信息工程的就去照相馆做PS好了。<br>唉&#8230;&#8230;这几天正是新生入学，还看着一批一批的新生往我们宿舍这边走，我心里真是难过，真想跟他们说</p>
<p>，&#8220;回去吧，说不定来年还能考个清华。&#8221;还有那么多家长，送个孩子上大学多不容易，但也许他们还不知道，他们的儿子要接受这样的教育。想着这些事，心都在痛啊。<br>&nbsp;&nbsp;&nbsp;悲&#8230;&#8230;</p><img src ="http://www.cppblog.com/linyangfei/aggbug/60388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-08-29 18:43 <a href="http://www.cppblog.com/linyangfei/archive/2008/08/29/60388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 1112 Team Them Up! 求补图，连通分量，DP</title><link>http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Thu, 07 Aug 2008 16:51:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/58295.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/58295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/58295.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;Team Them Up!                                    Time Limit: 1000MS                                    &nbsp;                                    Memory Limit: 10000K ...&nbsp;&nbsp;<a href='http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html'>阅读全文</a><img src ="http://www.cppblog.com/linyangfei/aggbug/58295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-08-08 00:51 <a href="http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人比赛时心理素质不好</title><link>http://www.cppblog.com/linyangfei/archive/2008/08/04/57989.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 04 Aug 2008 10:33:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/08/04/57989.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/57989.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/08/04/57989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/57989.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/57989.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<a href="http://acm.tju.edu.cn/toj/vcontest/contest1688.html">http://acm.tju.edu.cn/toj/vcontest/contest1688.html</a> <br>&nbsp; 今天做level 1的比赛就做了一道trie的题目。后来一直被困在G题上面，我一直以为G题有状态压缩DP的方法，就没有去想其他的方法了。就一直在G死循环。但赛后跟大牛们一交流，原来这题是爆搞，复杂度6^8。就花了10分钟把这题切了。反思今天的比赛，其实当时如果自己尝试别的方法，就不会一直困在这里。特别是看到别人过题的时候自己没过题，心里反倒是越来越紧张，到后面就很不爽了。脑子里也很乱，自己都调整不过来。还有今天比赛的题目都没读，实在是不应该。<img src ="http://www.cppblog.com/linyangfei/aggbug/57989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-08-04 18:33 <a href="http://www.cppblog.com/linyangfei/archive/2008/08/04/57989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 2047</title><link>http://www.cppblog.com/linyangfei/archive/2008/08/02/57811.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 02 Aug 2008 03:18:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/08/02/57811.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/57811.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/08/02/57811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/57811.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/57811.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;
<div class=ptt lang=en-US align=center>Concert Hall Scheduling</div>
<div class=plm>
<table align=center>
    <tbody>
        <tr>
            <td><strong>Time Limit:</strong> 1000MS</td>
            <td width=10></td>
            <td><strong>Memory Limit:</strong> 30000K</td>
        </tr>
        <tr>
            <td><strong>Total Submissions:</strong> 574</td>
            <td width=10></td>
            <td><strong>Accepted:</strong> 229</td>
        </tr>
    </tbody>
</table>
</div>
<p class=pst>Description</p>
<div class=ptx lang=en-US>You are appointed director of a famous concert hall, to save it from bankruptcy. The hall is very popular, and receives many requests to use its two fine rooms, but unfortunately the previous director was not very efficient, and it has been losing money for many years. The two rooms are of the same size and arrangement. Therefore, each applicant wishing to hold a concert asks for a room without specifying which. Each room can be used for only one concert per day. <br>In order to make more money, you have decided to abandon the previous fixed price policy, and rather let applicants specify the price they are ready to pay. Each application shall specify a period [i, j] and an asking price w, where i and j are respectively the first and last days of the period (1 &lt;= i &lt;= j &lt;= 365), and w is a positive integer in yen, indicating the amount the applicant is willing to pay to use a room for the whole period. <br><br>You have received applications for the next year, and you should now choose the applications you will accept. Each application should be either accepted for its whole period or completely rejected. Each concert should use the same room during the whole applied period. <br><br>Considering the dire economic situation of the concert hall, artistic quality is to be ignored, and you should just try to maximize the total income for the whole year by accepting the most profitable applications. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The input has multiple data sets, each starting with a line consisting of a single integer n, the number of applications in the data set. Then, it is followed by n lines, each of which represents one application with a period [i, j] and an asking price w yen in the following format. <br><br>i j w <br><br>A line containing a single zero indicates the end of the input. <br><br>The maximum number of applications in a data set is one thousand, and the maximum asking price is one million yen. <br></div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each data set, print a single line containing an integer, the maximum total income in yen for the data set.</div>
<p class=pst>Sample Input</p>
<pre class=sio>4
1 2 10
2 3 10
3 3 10
1 3 10
6
1 20 1000
3 25 10000
5 15 5000
22 300 5500
10 295 9000
7 7 6000
8
32 251 2261
123 281 1339
211 235 5641
162 217 7273
22 139 7851
194 198 9190
119 274 878
122 173 8640
0
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>30
25500
38595</pre>
<p class=pst>Source</p>
<div class=ptx lang=en-US><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=Japan+2003"><u><font color=#0000ff>Japan 2003</font></u></a>,Aizu</div>
&nbsp;<br>&nbsp;&nbsp;&nbsp; 这道题目放了很久了，一直没想出好的解法。最近的几次比赛中都遇到了这道题，比赛后才把这题搞定。这题的方法是DP。输入数据记录要处理一下，开一个366大的vector数组，记录了到第e天结束时的音乐会的开始时间s和收益w。开一个dp[366][366]的数组，其中dp[i][j]表示第一个音乐厅在第i天，第二个音乐厅在第j天收到的yen。因为预定的音乐会占用音乐厅是有一个区间的，这里做一个处理，就是在一场音乐会占用的期间都不收钱，直到一个音乐会完全结束后才收钱。另外两个音乐厅是一样的，即最后dp[i][j]应该是一个对称数组，当只接受一场音乐会的情况可以强行的认为这场音乐会是放在第一个音乐厅，计算dp[i][j]中所有i&gt;j的值，最后再令dp[j][i]=dp[i][j]即可。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">365</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_24_466_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_466_Open_Text.style.display='none'; Codehighlighter1_24_466_Closed_Image.style.display='inline'; Codehighlighter1_24_466_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_466_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_466_Closed_Text.style.display='none'; Codehighlighter1_24_466_Open_Image.style.display='inline'; Codehighlighter1_24_466_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_24_466_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_24_466_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(jj</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;jj</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">hall[i].size();&nbsp;jj</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_67_328_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_328_Open_Text.style.display='none'; Codehighlighter1_67_328_Closed_Image.style.display='inline'; Codehighlighter1_67_328_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_67_328_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_328_Closed_Text.style.display='none'; Codehighlighter1_67_328_Open_Image.style.display='inline'; Codehighlighter1_67_328_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_67_328_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_328_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_96_168_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_168_Open_Text.style.display='none'; Codehighlighter1_96_168_Closed_Image.style.display='inline'; Codehighlighter1_96_168_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_96_168_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_168_Closed_Text.style.display='none'; Codehighlighter1_96_168_Open_Image.style.display='inline'; Codehighlighter1_96_168_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_96_168_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_96_168_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Max(dp[i][j],dp[hall[i][jj].s</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">hall[i][jj].w);<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(ii</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jj</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;ii</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">hall[i].size();&nbsp;ii</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_216_323_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_323_Open_Text.style.display='none'; Codehighlighter1_216_323_Closed_Image.style.display='inline'; Codehighlighter1_216_323_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_216_323_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_216_323_Closed_Text.style.display='none'; Codehighlighter1_216_323_Open_Image.style.display='inline'; Codehighlighter1_216_323_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_216_323_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_216_323_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Max(dp[i][i],dp[hall[i][jj].s</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][hall[i][ii].s</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hall[i][jj].w</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">hall[i][ii].w);<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">i;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_356_462_Open_Image onclick="this.style.display='none'; Codehighlighter1_356_462_Open_Text.style.display='none'; Codehighlighter1_356_462_Closed_Image.style.display='inline'; Codehighlighter1_356_462_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_356_462_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_356_462_Closed_Text.style.display='none'; Codehighlighter1_356_462_Open_Image.style.display='inline'; Codehighlighter1_356_462_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_356_462_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_356_462_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Max(dp[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j],dp[i][j]);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Max(dp[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],dp[i][j]);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[j][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dp[i][j];<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><img src ="http://www.cppblog.com/linyangfei/aggbug/57811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-08-02 11:18 <a href="http://www.cppblog.com/linyangfei/archive/2008/08/02/57811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>7月16-7月21荒废的一周！！！</title><link>http://www.cppblog.com/linyangfei/archive/2008/07/20/56710.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sun, 20 Jul 2008 15:13:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/07/20/56710.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/56710.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/07/20/56710.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/56710.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/56710.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; 一周都没有好好的做题。又碰上学校的网络跟千年老乌龟似的慢，上个poj要等上5分钟，做比赛这种速度搞得一点都不爽。这周同学来长沙，所以我原来做题的计划全被打乱，不过倒是逛了长沙好多地方，呵呵（来长沙三年，第一次这样了解长沙）。暑假留在长沙又不是留在这玩的，下周同学就走了，希望自己能够调整好状态，用这20天的时间好好冲一把，加油！加油！</p><img src ="http://www.cppblog.com/linyangfei/aggbug/56710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-07-20 23:13 <a href="http://www.cppblog.com/linyangfei/archive/2008/07/20/56710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 2335 浮点数的gcd</title><link>http://www.cppblog.com/linyangfei/archive/2008/06/28/54874.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 28 Jun 2008 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/06/28/54874.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/54874.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/06/28/54874.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/54874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/54874.html</trackback:ping><description><![CDATA[<div class=ptt lang=en-US align=center>Temple of Dune</div>
<div class=plm>
<table align=center>
    <tbody>
        <tr>
            <td><strong>Time Limit:</strong> 1000MS</td>
            <td width=10></td>
            <td><strong>Memory Limit:</strong> 65536K</td>
        </tr>
        <tr>
            <td><strong>Total Submissions:</strong> 211</td>
            <td width=10></td>
            <td><strong>Accepted:</strong> 82</td>
        </tr>
    </tbody>
</table>
</div>
<p class=pst>Description</p>
<div class=ptx lang=en-US>The Archaeologists of the Current Millenium (ACM) now and then discover ancient artifacts located at the vertices of regular polygons. In general it is necessary to move one sand dune to uncover each artifact. After discovering three artifacts, the archaeologists wish to compute the minimum number of dunes that must be moved to uncover all of them.</div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The first line of input contains a positive integer n, the number of test cases. Each test case consists of three pairs of real numbers giving the x and y coordinates of three vertices from a regular polygon.</div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each line of input, output a single integer stating the fewest vertices that such a polygon might have. You may assume that each input case gives three distinct vertices of a regular polygon with at most 200 vertices. </div>
<p class=pst>Sample Input</p>
<pre class=sio>4
10.00000 0.00000 0.00000 -10.00000 -10.00000 0.00000
22.23086 0.42320 -4.87328 11.92822 1.76914 27.57680
156.71567 -13.63236 139.03195 -22.04236 137.96925 -11.70517
129.400249 -44.695226 122.278798 -53.696996 44.828427 -83.507917
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>4
6
23
100
</pre>
<p class=pst>Source</p>
<div class=ptx lang=en-US><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=Waterloo+local+2003.01.25"><u><font color=#0000ff>Waterloo local 2003.01.25</font></u></a></div>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体"><br><br>题目大意是给出三个点的(x,y)坐标，要求输出一个边数最小的正多边形的边数，使这三个点恰好在</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">这个正多边形上面。其实这个三角形和这个正多边形是共外接圆，由外接圆的圆心出发，三角形的三</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">条边可以把圆分成三份，每份圆弧所对应的圆心角分别为arg[0],arg[1]和arg[2]，正多边形把圆弧</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">分成相等的n份，每份对应的圆心角为2*pi/n。其实三角形的三个角就分别占用了若干等份正多边形</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">所划分的圆弧，最后也就只要求arg[0],arg[1],arg[2]和2*pi的最大公约数(gcd)即可。但是这里是</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">个角度都是浮点数，所以还定义一个浮点数的gcd，计算浮点数的gcd可以利用math.h的函数fmod</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">(x,y)表示x%y。例如3.5%0.3=0.2，x%y的结果为不超过y的一个浮点数。下面写了一个fmod(x,y)自己</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">的实现。<br>double fmod(double x, double y)<br>{<br>&nbsp;return x-floor(x/y)*y;<br>}<br>有了fmod函数以后，就可以用它来求gcd了！<br>double fgcd(double a, double b)<br>{<br>&nbsp;double t;<br>&nbsp;if(dblcmp(a-b) == 1)&nbsp; //a&gt;b<br>&nbsp;{<br>&nbsp;&nbsp;t=a;<br>&nbsp;&nbsp;a=b;<br>&nbsp;&nbsp;b=t;<br>&nbsp;}<br>&nbsp;if(dblcmp(a) == 0) return b;<br>&nbsp;return fgcd(fmod(b,a),a);<br>}<br></p><img src ="http://www.cppblog.com/linyangfei/aggbug/54874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-06-28 15:18 <a href="http://www.cppblog.com/linyangfei/archive/2008/06/28/54874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Written to alpcs in Normal</title><link>http://www.cppblog.com/linyangfei/archive/2008/06/18/53935.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Wed, 18 Jun 2008 14:50:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/06/18/53935.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/53935.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/06/18/53935.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/53935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/53935.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 18pt; FONT-FAMILY: Comic Sans MS">Last night alpc40 received a message and he told me sadly that two alpcs are eliminated from <st1:city w:st="on"><st1:place w:st="on">Normal</st1:place></st1:city>, and he wasn&#8217;t willing to face up to the cruel reality. Actually the competition in alpcs also in&nbsp;ICPC<a title=alpc60-ACM/ICPC程序设计博客 href="http://www.cppblog.com/linyangfei/"> </a>is so fierce that every ACMers must do their best to improve themselves and to fight in every contest. Although it is so hard, I think that is why this contest attracts so many excellent programmers to join in the contest. I am sorry to hear that someone of you will lose your chances after these contests, but I want to remind you that every one no matter in Seed or <st1:place w:st="on"><st1:city w:st="on">Normal</st1:city></st1:place> makes great effort. And you must realize that you are not as powerful as that Big Cows now. Someone who loses your chance does not mean that you lose all your chances in&nbsp;<a title=alpc60-ACM/ICPC程序设计博客 href="http://www.cppblog.com/linyangfei/">ICPC </a>. If you really love it and want to do it, I think you mustn&#8217;t give it up. Because most of you are Sophomore or even freshmen, you still have many chances if and only if you work harder and learn more. ICPC is open to every body, and hope all of you will enjoy this game.</span></span></p><img src ="http://www.cppblog.com/linyangfei/aggbug/53935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-06-18 22:50 <a href="http://www.cppblog.com/linyangfei/archive/2008/06/18/53935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>湖大邀请赛总结</title><link>http://www.cppblog.com/linyangfei/archive/2008/05/26/51161.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 26 May 2008 10:00:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/05/26/51161.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/51161.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/05/26/51161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/51161.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/51161.html</trackback:ping><description><![CDATA[&nbsp;
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这次去湖大是和</span><span>alpc62</span><span>还有</span><span>alpc07</span><span>一组，在赛前进行的两次淘汰赛中，我们组的表现就非常不好，最后一名。先前组织的两次淘汰赛中，我觉得我们就一直没有分好题，比赛中就一个劲地钻到难题上，也没有认真地考虑其他可以</span><span>AC</span><span>掉的题目，比赛一开始就陷入其中，难题不能够很快</span><span>AC</span><span>，就一直停留在一个题上面，很久过后才开始跟题，所以造成了很被动的局面。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>今天去湖大我认为就要避免我们组再出现这种情况，一定要读题，要多想题！大清早坐校车一路风光的到了湖大（长沙今天搞火炬传递预演，人很多，结果校车无视旁人地开了过去）。离比赛还有一个多小时的时间。这时</span><span>alpc62</span><span>跟我说，他今天的状态不好，昨晚做</span><span>topcoder</span><span>做到很晚才睡。于是找了个地方大睡一阵，醒来后就精神饱满的说今天可以敲题了。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>题目印刷地很乱，分题的时候就个人撕了</span><span>1/3</span><span>的题目。</span><span>Alpc62</span><span>先拿到了</span><span>A</span><span>，用一个</span><span>log</span><span>函数过掉了。然后我看题，发现一个中文字符串</span><span>DP</span><span>题，我觉得可以做，就跟</span><span>62</span><span>说题了。</span><span>62</span><span>大敲一阵，我就一直在找题目中的</span><span>trick</span><span>，因为我感觉这道题有很多没说清楚的地方，不久程序写完，没出样例，然后我们开始检查，发现题目中有一个错误，于是就跑去网页上看，我的天啊！网页上的描述和我们手上拿到的题目差了这么多，按照</span><span>clarification</span><span>上说的一切以网页上的为准，于是我们对着网页上的题，过了样例，一交是</span><span>WA</span><span>，提交了打印代码，于是</span><span>62</span><span>觉得要换题。这时</span><span>alpc07</span><span>读了一道猜数字的题，我们判断是弱题，简单暴搞就行。</span><span>Alpc07</span><span>上去敲，结果</span><span>WA</span><span>，这下搞得郁闷了。不管我们又换题，我又读了全场最多人过的一道题，我开始还在想</span><span>DP</span><span>，跟</span><span>alpc62</span><span>说了以后，他毫不犹豫地说，</span><span>dijkstra</span><span>嘛，是全年成都热身赛的原题。很快就</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="a"><span>1A</span></st1:chmetcnv><span>了，过了这时</span><span>alpc62</span><span>的人品就暴了，在吸取了前面的教训后，我们打开网页，认真读了上面的题，发现</span><span>alpc07</span><span>敲的那到题是因为读入的时候错了，读入以一个非正数结束，而不是以－</span><span>1</span><span>结束（这次比赛题目真的很多</span><span>bug</span><span>）。于是我们又瞬过了一题。接下来</span><span>3</span><span>题做得都很顺，都是</span><span>alpc62</span><span>给</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="a"><span>1A</span></st1:chmetcnv><span>了。最激动的是我们</span><span>A</span><span>了</span><span>6</span><span>道题以后，开始</span><span>WA</span><span>掉的中文字符串</span><span>DP</span><span>题被</span><span>rejudge</span><span>了，结果</span><span>alpc62</span><span>的程序还是</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="a"><span>1A</span></st1:chmetcnv><span>。题目数瞬间就涨到了</span><span>7</span><span>题。这时我们还有一道博弈和连连看模拟题，博弈我推了半天公式，都是</span><span>WA</span><span>，其实我到现在都搞不清楚博弈的原理&#8230;&#8230;连连看模拟题，我觉得自己可以做，但是由于题目没有描述清楚，我有很多细节的地方没有考虑清楚，没敲。最后一个小时的时间就是</span><span>alpc62</span><span>和</span><span>alpc07</span><span>两个人在弄</span><span>RSA</span><span>。写了好久，快到比赛结束了，</span><span>alpc62</span><span>发现自己没有带模版了，最后这道题没出，比赛结束，我们是</span><span>7</span><span>道题。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>今天在比赛中，我基本上没有敲题，在组里面协调分题，注意场上的形势。就在这次的比赛中我觉得读题对于一个队伍来说很重要。特别是想要出</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="a"><span>1A</span></st1:chmetcnv><span>，</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="a"><span>1A</span></st1:chmetcnv><span>的时候可以鼓舞队伍的士气，也不会让大家被一道题目给缠住。另外也可以节省很多时间，过题以后，可以抛弃好多的负担，全力投入到下一道题目中去。对于今天比赛这样的题目，读题是关键。题目不是很难的情况下，在读题中可以发现很多容易卡时的细节。比如输入输出格式，数据范围，题目中冗长的废话，特殊情况的说明&#8230;&#8230;这些都是在敲题的时候要注意的。读题读不好在前两次比赛中都吃了很大的亏，今天自认为读题的情况还不错，比赛中间的那段也做得很顺利。除此之外，今天在比赛中我的收获还有就是看</span><span>alpc62</span><span>大牛敲题，我觉得他在敲题的时候思路很清楚，脑子想得很快。感觉他敲题的时候就专心的熔入到题目之中了，思维一直都很连贯，而且对自己代码的驾驭能力很强。我觉得这些也是我要在以后的练习中要加强的。</span></p><img src ="http://www.cppblog.com/linyangfei/aggbug/51161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-05-26 18:00 <a href="http://www.cppblog.com/linyangfei/archive/2008/05/26/51161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树形DP PKU 1947 Rebuilding Roads</title><link>http://www.cppblog.com/linyangfei/archive/2008/05/05/48913.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 05 May 2008 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/05/05/48913.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/48913.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/05/05/48913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/48913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/48913.html</trackback:ping><description><![CDATA[<div class=ptt lang=en-US>Rebuilding Roads</div>
<div class=plm>
<table align=center>
    <tbody>
        <tr>
            <td><strong>Time Limit:</strong> 1000MS</td>
            <td width=10></td>
            <td><strong>Memory Limit:</strong> 30000K</td>
        </tr>
        <tr>
            <td><strong>Total Submissions:</strong> 1146</td>
            <td width=10></td>
            <td><strong>Accepted:</strong> 390</td>
        </tr>
    </tbody>
</table>
</div>
<p class=pst>Description</p>
<div class=ptx lang=en-US>The cows have reconstructed Farmer John's farm, with its N barns (1 &lt;= N &lt;= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra roads, so now there is exactly one way to get from any given barn to any other barn. Thus, the farm transportation system can be represented as a tree. <br><br>Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 &lt;= P &lt;= N) barns from the rest of the barns.</div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>* Line 1: Two integers, N and P <br><br>* Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads. <br></div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>A single line containing the integer that is the minimum number of roads that need to be destroyed for a subtree of P nodes to be isolated. <br></div>
<p class=pst>Sample Input</p>
<pre class=sio>11 6
1 2
1 3
1 4
1 5
2 6
2 7
2 8
4 9
4 10
4 11
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>2</pre>
<p class=pst>Hint</p>
<div class=ptx lang=en-US>[A subtree with nodes (1, 2, 3, 6, 7, 8) will become isolated if roads 1-4 and 1-5 are destroyed.] <br></div>
<p class=pst>Source</p>
<div class=ptx lang=en-US><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=USACO+2002+February"><u><font color=#0000ff>USACO 2002 February</font></u></a></div>
<br><br>&nbsp;&nbsp;&nbsp; 题目给出了一个树节点数为n，要求去掉最少的边，得出一个子树，使得这个子树的节点树为m。<br>&nbsp;&nbsp;&nbsp; 首先这是一棵无根树，任意一个节点都可以作为根。这里就去1号节点为根。考虑除根节点外，树中的每一个节点。一种情况是在dfs时，该节点脱离它的父节点，由它和它的子节点共同组成一棵子树，这样要把边删掉；另一种情况是保持该节点与其父节点的连接，不要删边。在做dfs的时候，对于当前节点v，计算所有子节点产生的dp值。dp[i][j]表示第i个节点为根，生成节点数为j的子树所需要删掉的最小边的条数。最后还要注意整颗树的根节点因为它没有父节点，所以不用计算删除的边。<br>&nbsp;&nbsp;&nbsp; dfs做dp的过程如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;search(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_19_399_Open_Image onclick="this.style.display='none'; Codehighlighter1_19_399_Open_Text.style.display='none'; Codehighlighter1_19_399_Closed_Image.style.display='inline'; Codehighlighter1_19_399_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_19_399_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_399_Closed_Text.style.display='none'; Codehighlighter1_19_399_Open_Image.style.display='inline'; Codehighlighter1_19_399_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_19_399_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_19_399_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k,t;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;mark[v]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dp[v][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dp[v][num[v]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_103_397_Open_Image onclick="this.style.display='none'; Codehighlighter1_103_397_Open_Text.style.display='none'; Codehighlighter1_103_397_Closed_Image.style.display='inline'; Codehighlighter1_103_397_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_103_397_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_103_397_Closed_Text.style.display='none'; Codehighlighter1_103_397_Open_Image.style.display='inline'; Codehighlighter1_103_397_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_103_397_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_103_397_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(g[v][i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">mark[i])<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_133_394_Open_Image onclick="this.style.display='none'; Codehighlighter1_133_394_Open_Text.style.display='none'; Codehighlighter1_133_394_Closed_Image.style.display='inline'; Codehighlighter1_133_394_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_133_394_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_133_394_Closed_Text.style.display='none'; Codehighlighter1_133_394_Open_Image.style.display='inline'; Codehighlighter1_133_394_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_133_394_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_133_394_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search(i);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num[v];&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_180_390_Open_Image onclick="this.style.display='none'; Codehighlighter1_180_390_Open_Text.style.display='none'; Codehighlighter1_180_390_Closed_Image.style.display='inline'; Codehighlighter1_180_390_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_180_390_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_180_390_Closed_Text.style.display='none'; Codehighlighter1_180_390_Open_Image.style.display='inline'; Codehighlighter1_180_390_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_180_390_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_180_390_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">(dp[v][j]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INF)<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_210_385_Open_Image onclick="this.style.display='none'; Codehighlighter1_210_385_Open_Text.style.display='none'; Codehighlighter1_210_385_Closed_Image.style.display='inline'; Codehighlighter1_210_385_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_210_385_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_210_385_Closed_Text.style.display='none'; Codehighlighter1_210_385_Open_Image.style.display='inline'; Codehighlighter1_210_385_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_210_385_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_210_385_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num[i];&nbsp;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id=Codehighlighter1_247_379_Open_Image onclick="this.style.display='none'; Codehighlighter1_247_379_Open_Text.style.display='none'; Codehighlighter1_247_379_Closed_Image.style.display='inline'; Codehighlighter1_247_379_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_247_379_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_247_379_Closed_Text.style.display='none'; Codehighlighter1_247_379_Open_Image.style.display='inline'; Codehighlighter1_247_379_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_247_379_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_247_379_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">(dp[i][k]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INF)<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_281_372_Open_Image onclick="this.style.display='none'; Codehighlighter1_281_372_Open_Text.style.display='none'; Codehighlighter1_281_372_Closed_Image.style.display='inline'; Codehighlighter1_281_372_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_281_372_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_281_372_Closed_Text.style.display='none'; Codehighlighter1_281_372_Open_Image.style.display='inline'; Codehighlighter1_281_372_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_281_372_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_281_372_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dp[v][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(num[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k)];<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[v][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(num[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k)]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Min(t,dp[v][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dp[i][k]);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img id=Codehighlighter1_413_928_Open_Image onclick="this.style.display='none'; Codehighlighter1_413_928_Open_Text.style.display='none'; Codehighlighter1_413_928_Closed_Image.style.display='inline'; Codehighlighter1_413_928_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_413_928_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_413_928_Closed_Text.style.display='none'; Codehighlighter1_413_928_Open_Image.style.display='inline'; Codehighlighter1_413_928_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_413_928_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_413_928_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,a,b;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">freopen("in.txt","r",stdin);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%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);<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(g,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,sizeof(g));<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(num,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,sizeof(num));<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">INF;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id=Codehighlighter1_620_670_Open_Image onclick="this.style.display='none'; Codehighlighter1_620_670_Open_Text.style.display='none'; Codehighlighter1_620_670_Closed_Image.style.display='inline'; Codehighlighter1_620_670_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_620_670_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_620_670_Closed_Text.style.display='none'; Codehighlighter1_620_670_Open_Image.style.display='inline'; Codehighlighter1_620_670_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_620_670_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_620_670_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b);<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g[a][b]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">g[b][a]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(mark,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,sizeof(mark));<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dfs(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;memset(mark,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,sizeof(mark));<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;search(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">INF;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img id=Codehighlighter1_791_895_Open_Image onclick="this.style.display='none'; Codehighlighter1_791_895_Open_Text.style.display='none'; Codehighlighter1_791_895_Closed_Image.style.display='inline'; Codehighlighter1_791_895_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_791_895_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_791_895_Closed_Text.style.display='none'; Codehighlighter1_791_895_Open_Image.style.display='inline'; Codehighlighter1_791_895_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_791_895_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_791_895_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for(j=1;&nbsp;j&lt;=num[i];&nbsp;j++)<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dp[i][m];<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(b&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;a)<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">60</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">,a);<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div><img src ="http://www.cppblog.com/linyangfei/aggbug/48913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-05-05 17:38 <a href="http://www.cppblog.com/linyangfei/archive/2008/05/05/48913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中南赛结束了</title><link>http://www.cppblog.com/linyangfei/archive/2008/04/30/48532.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Wed, 30 Apr 2008 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/04/30/48532.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/48532.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/04/30/48532.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/48532.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/48532.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 中南赛结束了，结果出乎意料。大家在场上都没发挥好。我们组是alpc T8，比赛开始</p>
<p>的时候分题，我读DEF，很快我就发现了E是一道水题，上手就敲，测试了几个数据之后就</p>
<p>submit了。遗憾啊，这就是我们组这场比赛唯一的一个1/Y。在中南赛前夜，我还在想有尽</p>
<p>量多的1/Y，一上场这么快就水过了一道题，我还以为今天的题目很简单。当时的心情那个</p>
<p>激动啊&#8230;&#8230;过题后我又立马读D题，看起来很像一道模拟题，我自信地认为这题跟E一样，</p>
<p>马上又开始敲代码，敲着敲着就发现不对了，数据量达到了100000，暴搞的话会超时，我</p>
<p>意识到这道题不光是纯粹的模拟，应该要借助于些数据结构的了。我们组放慢了脚步。</p>
<p>alpc40和alpc43仍在读题，接着alpc40跟我讲C题，700个点中选出三个点，使得这三个点</p>
<p>确定的外接圆半径最大。O(n^3)的时间会超时，于是我又一次不加思索地说&#8220;突包&#8221;，兴</p>
<p>致勃勃地敲了个突包，结果WA。打印代码，以为是我的突包错了，再改，再WA。这时已经</p>
<p>两个多小时过去了，我们还是一个气球。一次次的WA让我冷静下来想，问题没这么简单，</p>
<p>后来讨论发现先求突包，再枚举点的方法是错的。做了两个多小时的算法从根本上是错的</p>
<p>，当时我就预感到比赛后的结果了。最后敲了个O(n^3)的暴搞，TLE。此时我已经放弃了。</p>
<p>比赛中作为一个主力，我觉得我的表现实在是太差了，没有认真地讨论和分析就敲题，大</p>
<p>部分时间占用着键盘，以致于alpc43整场比赛都没有碰到键盘。组队赛变成了我的个人赛</p>
<p>，并没有发挥三个人的合力。特别是到了最后15分钟，变成了垃圾时间，没题可做了，我</p>
<p>们开始边吃汉堡，边刷rank list&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp; 总结这次比赛，首先是我，场上的经验还不足。比如在这次比赛中场上出现了没题做</p>
<p>，算法错误等致命的情况时，我完全就不能控制这样的局面，冲动－&gt;失落-&gt;放弃，在组队</p>
<p>赛中很忌讳出现这样的情形。比赛的时候和平时做题都不一样，当时脑子就很混乱，再也</p>
<p>没心思想其他的题目了。另外也是自己的实力原因，对题目把握得不好。对于我们组，我</p>
<p>觉得互相的交流和讨论还有待改进，有时说题意，对方很难领会，比赛中的讨论也没出现</p>
<p>有意义的亮点。<br>&nbsp;&nbsp;&nbsp; alpcs都在好好地反思反思再反思&#8230;&#8230;也许给我自己的机会并不多，认真做好每一场比</p>
<p>赛，每场比赛都要有收获。</p><img src ="http://www.cppblog.com/linyangfei/aggbug/48532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-04-30 17:34 <a href="http://www.cppblog.com/linyangfei/archive/2008/04/30/48532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中南赛前夜</title><link>http://www.cppblog.com/linyangfei/archive/2008/04/26/48204.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 26 Apr 2008 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/04/26/48204.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/48204.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/04/26/48204.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/48204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/48204.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 明天就是中南赛了，去年选了十组，因为当时自己实力太菜，没有机会能够参加。经</p>
<p>过了一年的努力，今年取得了这个机会。和我同组的还有alpc40和alpc43。我们平时还都</p>
<p>比较了解了。alpc40和我是一个宿舍的，平时做题的交流也比较多，我们两写程序的风格</p>
<p>也差不多（一个老师教的嘛^_^）。我觉得alpc40在做数学题，找规律的题目时还是很快能</p>
<p>找到方法的，在比赛的时候，他比较喜欢自己出数据，敲完题后总是不断地出数据来检验</p>
<p>自己的程序，在校赛中就看出了，虽然他交题的时间不是最早的，因为他一直在出数据测</p>
<p>试自己的程序，一直测到自己认为没有问题了，才提交，很大概率出1/Y的。所以尽管交题</p>
<p>不快，但因错得少，罚时少，校赛时在同样题目数的人中还是排在了前面。我觉得这点非</p>
<p>常好，在明天的比赛中，我们首先要求稳。我觉得我们的实力绝对不至于强到把所有的题</p>
<p>目都做出来，也不见得会比别人多出题，所以在很多同样题目数的人中，还是要拼罚时的</p>
<p>。这就需要在比赛中做的稳，争取尽量多的1/Y。我也要克服平时比较急躁的习惯，切忌不</p>
<p>要一出样例就交，回顾一下自己的程序，测试一下数据，查找错误。这两次比赛看了</p>
<p>alpc43的代码，我觉得他的代码实在是很乱，很多缩进，换行都用得不规范，写程序的时</p>
<p>候容易造成思路不清晰，在检查程序的时候也很难发现错误，会浪费很多时间。我觉得比</p>
<p>赛中，给alpc43做些代码量不大，但是思路能够出来得比较清晰的题目。至于我，我觉得</p>
<p>应该担起大量的代码任务，在组里，我的代码速度还可以。可以写点代码量大的模拟题，</p>
<p>尽量快地AC，好为我们组节省时间。另外，一些设计算法，数据结构的题目（网络流，二</p>
<p>分图，高精度，线段树，计算几何等），我也要敲敲，争取能冲出更多的题。<br>&nbsp;&nbsp;&nbsp; 从今天的热身赛来看，我的状态一点都不好。可能是这个星期，又要做题，又要考试</p>
<p>，还要组织数据库的复习，有点搞得太累了。就写这么点了，今晚休息好点，但愿明天能</p>
<p>保持最佳的状态^_^</p><img src ="http://www.cppblog.com/linyangfei/aggbug/48204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-04-26 21:01 <a href="http://www.cppblog.com/linyangfei/archive/2008/04/26/48204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不用IDE的结果</title><link>http://www.cppblog.com/linyangfei/archive/2008/04/21/47757.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 21 Apr 2008 12:19:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/04/21/47757.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/47757.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/04/21/47757.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/47757.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/47757.html</trackback:ping><description><![CDATA[<div class=ptt lang=en-US>&nbsp;&nbsp;&nbsp;现在改用UltraEdit敲题，g++编译。好不适应，因为没了VC的调试功能，也没有了IDE弹出代码的功能。自己敲，错了要自己检查。今天敲题就吃了亏，判断一个字符要在p-z之间，结果我写成了q-z，造成了无尽的WA&#8230;&#8230;后来还是忍不住，在VC的帮助下AC的。不用VC的日子，过道题还真不容易啊。所以现在都没有勇气挑战3KB Code 的代码了。总之，自己还要慢慢适应，还要一点点进步。</div><img src ="http://www.cppblog.com/linyangfei/aggbug/47757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-04-21 20:19 <a href="http://www.cppblog.com/linyangfei/archive/2008/04/21/47757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迭代加深搜索</title><link>http://www.cppblog.com/linyangfei/archive/2008/04/20/47664.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sun, 20 Apr 2008 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/04/20/47664.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/47664.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/04/20/47664.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/47664.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/47664.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><strong><span lang=EN-US style="FONT-SIZE: 18pt; COLOR: blue; FONT-FAMILY: Arial">The Rotation Game<o:p></o:p></span></strong></p>
<div align=center>
<table class=MsoNormalTable style="mso-cellspacing: 1.5pt" cellPadding=0 border=0>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>Time Limit:</span></strong><span lang=EN-US> 15000MS</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; WIDTH: 7.5pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=10>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>Memory Limit:</span></strong><span lang=EN-US> 150000K</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>Total Submissions:</span></strong><span lang=EN-US> 944</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; WIDTH: 7.5pt; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=10>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ece9d8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US>Accepted:</span></strong><span lang=EN-US> 218</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Description</font></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The blocks are marked with symbols 1, 2 and 3, with exactly 8 pieces of each kind. </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><span lang=EN-US><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1025 style="WIDTH: 396pt; HEIGHT: 150pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://acm.pku.edu.cn/JudgeOnline/images/2286_1.jpg" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image001.jpg"></v:imagedata></v:shape></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align=left><span lang=EN-US><br>Initially, the blocks are placed on the board randomly. Your task is to move the blocks so that the eight blocks placed in the center square have the same symbol marked. There is only one type of valid move, which is to rotate one of the four lines, each consisting of seven blocks. That is, six blocks in the line are moved towards the head by one block and the head block is moved to the end of the line. The eight possible moves are marked with capital letters A to H. Figure 1 illustrates two consecutive moves, move A and move C from some initial configuration. </span></p>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Input</font></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>The input consists of no more than 30 test cases. Each test case has only one line that contains 24 numbers, which are the symbols of the blocks in the initial configuration. The rows of blocks are listed from top to bottom. For each row the blocks are listed from left to right. The numbers are separated by spaces. For example, the first test case in the sample input corresponds to the initial configuration in Fig.1. There are no blank lines between cases. There is a line containing a single `0' after the last test case that ends the input. </span></p>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Output</font></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>For each test case, you must output two lines. The first line contains all the moves needed to reach the final configuration. Each move is a letter, ranging from `A' to `H', and there should not be any spaces between the letters in the line. If no moves are needed, output `No moves needed' instead. In the second line, you must output the symbol of the blocks in the center square after these moves. If there are several possible solutions, you must output the one that uses the least number of moves. If there is still more than one possible solution, you must output the solution that is smallest in dictionary order for the letters of the moves. There is no need to output blank lines between cases. </span></p>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Sample Input</font></strong></span></p>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">1 1 1 1 3 2 3 2 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 3<o:p></o:p></span></pre>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3<o:p></o:p></span></pre>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">0<o:p></o:p></span></pre>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Sample Output</font></strong></span></p>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">AC<o:p></o:p></span></pre>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">2<o:p></o:p></span></pre>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">DDHH<o:p></o:p></span></pre>
<pre><span lang=EN-US style="FONT-FAMILY: 'Courier New'">2<o:p></o:p></span></pre>
<p class=pst style="MARGIN: auto 0cm"><span lang=EN-US><strong><font face=Arial color=#0000ff size=5>Source</font></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=Shanghai+2004"><font color=#0000ff>Shanghai 2004</font></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图中的</span><span lang=EN-US>#</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字格的</span><span lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">条竖线，可以按</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个方向倒转里面的数字方块，当中间的</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个数字方块是同一个数字时，游戏结束。这道题就要求搜索一个最短路径，倒转</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个方向使得中间</span><span lang=EN-US>8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个数字相等。这道题目看起来很像一道单纯的</span><span lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，看了</span><span lang=EN-US>POJ</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面说</span><span lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会爆内存，我没试，估计写得好的也爆不了。但是估计写</span><span lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还要涉及到状态的判重，程序写起来也不方便。我用了迭代加深的搜索方法。第一次接触这个算法，我说一下我的理解：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原来我很不理解迭代加深，搜索的深度一层一层地加，在后面的某一深度限制下搜索，必定会搜到前面深度所能搜到的结果，这会造成重复搜索。基于这点，我一直都认为迭代加深搜索的方法很冗余，当然也是自己从来都没有动手试过。像这道题就给我的收获不少，有的时候选择一定的策略进行搜索，我们是很难确定解所在状态空间的深度的，有时可能解的深度不大，但整个状态空间的深度很大，盲目的</span><span lang=EN-US>dfs</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索在状态空间里就有可能会越陷越深，迟迟出不了解，同时整个状态空间的宽度也很大，用</span><span lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能就会爆空间。迭代加深搜索恰恰是取了一个折中。利用了</span><span lang=EN-US>dfs</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的优势，限制了搜索的深度，避免了出现无解的境地。由于深度是逐个增加的，当搜到一个解后就退出，所以避免了</span><span lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中判重的一步操作，当然在迭代深搜的过程中，还可以加入剪枝，可以优化程序。但是我的程序在</span><span lang=EN-US>POJ</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上还不快，还要找找原因，也许还有优化。下面是一些关键代码：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(limit</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;;limit</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_25_275_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_275_Open_Text.style.display='none'; Codehighlighter1_25_275_Closed_Image.style.display='inline'; Codehighlighter1_25_275_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_25_275_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_275_Closed_Text.style.display='none'; Codehighlighter1_25_275_Open_Image.style.display='inline'; Codehighlighter1_25_275_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_25_275_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_25_275_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(start,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))<br><img id=Codehighlighter1_50_271_Open_Image onclick="this.style.display='none'; Codehighlighter1_50_271_Open_Text.style.display='none'; Codehighlighter1_50_271_Closed_Image.style.display='inline'; Codehighlighter1_50_271_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_50_271_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_50_271_Closed_Text.style.display='none'; Codehighlighter1_50_271_Open_Image.style.display='inline'; Codehighlighter1_50_271_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_50_271_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_50_271_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">(limit&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_75_116_Open_Image onclick="this.style.display='none'; Codehighlighter1_75_116_Open_Text.style.display='none'; Codehighlighter1_75_116_Closed_Image.style.display='inline'; Codehighlighter1_75_116_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_75_116_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_75_116_Closed_Text.style.display='none'; Codehighlighter1_75_116_Open_Image.style.display='inline'; Codehighlighter1_75_116_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_75_116_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_75_116_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No&nbsp;moves&nbsp;needed\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_131_230_Open_Image onclick="this.style.display='none'; Codehighlighter1_131_230_Open_Text.style.display='none'; Codehighlighter1_131_230_Closed_Image.style.display='inline'; Codehighlighter1_131_230_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_131_230_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_131_230_Closed_Text.style.display='none'; Codehighlighter1_131_230_Open_Image.style.display='inline'; Codehighlighter1_131_230_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_131_230_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_131_230_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">limit;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_166_204_Open_Image onclick="this.style.display='none'; Codehighlighter1_166_204_Open_Text.style.display='none'; Codehighlighter1_166_204_Closed_Image.style.display='inline'; Codehighlighter1_166_204_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_166_204_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_166_204_Closed_Text.style.display='none'; Codehighlighter1_166_204_Open_Image.style.display='inline'; Codehighlighter1_166_204_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_166_204_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_166_204_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">pre[i]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">,rlt);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">/迭代过程</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dfs(struct&nbsp;S&nbsp;now,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;depth)<br><img id=Codehighlighter1_318_1167_Open_Image onclick="this.style.display='none'; Codehighlighter1_318_1167_Open_Text.style.display='none'; Codehighlighter1_318_1167_Closed_Image.style.display='inline'; Codehighlighter1_318_1167_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_318_1167_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_318_1167_Closed_Text.style.display='none'; Codehighlighter1_318_1167_Open_Image.style.display='inline'; Codehighlighter1_318_1167_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_318_1167_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_318_1167_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c1,c2,c3;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;S&nbsp;st;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test(now,c1,c2,c3);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(c1&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_384_408_Open_Image onclick="this.style.display='none'; Codehighlighter1_384_408_Open_Text.style.display='none'; Codehighlighter1_384_408_Closed_Image.style.display='inline'; Codehighlighter1_384_408_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_384_408_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_384_408_Closed_Text.style.display='none'; Codehighlighter1_384_408_Open_Image.style.display='inline'; Codehighlighter1_384_408_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_384_408_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_384_408_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(c2&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_429_453_Open_Image onclick="this.style.display='none'; Codehighlighter1_429_453_Open_Text.style.display='none'; Codehighlighter1_429_453_Closed_Image.style.display='inline'; Codehighlighter1_429_453_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_429_453_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_429_453_Closed_Text.style.display='none'; Codehighlighter1_429_453_Open_Image.style.display='inline'; Codehighlighter1_429_453_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_429_453_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_429_453_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(c3&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_474_498_Open_Image onclick="this.style.display='none'; Codehighlighter1_474_498_Open_Text.style.display='none'; Codehighlighter1_474_498_Closed_Image.style.display='inline'; Codehighlighter1_474_498_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_474_498_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_474_498_Closed_Text.style.display='none'; Codehighlighter1_474_498_Open_Image.style.display='inline'; Codehighlighter1_474_498_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_474_498_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_474_498_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(depth&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;limit)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">c1&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;limit</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">depth&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">c2&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;limit</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">depth&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">c3&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;limit</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">depth)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateA(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateB(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateC(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateD(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateE(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateF(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateG(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NewStateH(now);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pre[depth]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dfs(st,depth</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">/深搜<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
</o:p></span>
<img src ="http://www.cppblog.com/linyangfei/aggbug/47664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-04-20 15:44 <a href="http://www.cppblog.com/linyangfei/archive/2008/04/20/47664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A*搜索求最短路</title><link>http://www.cppblog.com/linyangfei/archive/2008/04/20/47662.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sun, 20 Apr 2008 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2008/04/20/47662.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/47662.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2008/04/20/47662.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/47662.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/47662.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remmarguts' DateDescription"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks'...&nbsp;&nbsp;<a href='http://www.cppblog.com/linyangfei/archive/2008/04/20/47662.html'>阅读全文</a><img src ="http://www.cppblog.com/linyangfei/aggbug/47662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2008-04-20 15:25 <a href="http://www.cppblog.com/linyangfei/archive/2008/04/20/47662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sudoku</title><link>http://www.cppblog.com/linyangfei/archive/2007/09/23/32718.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sun, 23 Sep 2007 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2007/09/23/32718.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/32718.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2007/09/23/32718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/32718.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/32718.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><span>2676&nbsp;Sudoku</span></p>
<p>&#160;</p>
<p><span>Source from</span><span>：</span><span> <span>http://acm.pku.edu.cn/JudgeOnline/problem?id=2676</span></span></p>
<p><span>Sudoku</span><span>中文名&#8220;数独&#8221;游戏，游戏规则是在一个</span><span>9</span><span>&#215;</span><span>9</span><span>的方格中填入</span><span>1</span><span>－</span><span>9</span><span>这</span><span>9</span><span>个数字，</span><span>9</span><span>&#215;</span><span>9</span><span>的大方格又被划分成了</span><span>9</span><span>个</span><span>3</span><span>&#215;</span><span>3</span><span>的小方格，要求填入的这</span><span>1</span><span>－</span><span>9</span><span>这</span><span>9</span><span>个数字中，在每一行，每一列及每一个小方格中都不能重复出现。</span></p>
<p><span>在</span><span>pku</span><span>上，我暴搜的方法，将每个空格的位置几下，然后用</span><span>dfs</span><span>往里填数，不符合条件的就回溯。方法如下：</span></p>
<p><span>Source</span></p>
<p>&nbsp;</p>
<p><span>Problem: 2676&nbsp;User: alpc60 </span></p>
<p><span>Memory: 80K&nbsp;Time: 1171MS</span></p>
<p><span>Language: C++&nbsp;Result: Accepted</span></p>
<p>&nbsp;</p>
<p><span>Source </span></p>
<p><span>#include &lt;stdio.h&gt;</span></p>
<p><span>#include &lt;string.h&gt;</span></p>
<p>&nbsp;</p>
<p><span>struct P</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int x,y,num;</span></p>
<p><span>}point[100];</span></p>
<p><span>int map[10][10],count;</span></p>
<p><span>bool mr[10][10],mc[10][10],mm[10][10];</span></p>
<p>&nbsp;</p>
<p><span>int dfs(int n);</span></p>
<p><span>int find(int x, int y);</span></p>
<p>&nbsp;</p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,j,cases;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//freopen("2676.txt","r",stdin);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",&amp;cases);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(cases--)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>count=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mc,false,sizeof(mc));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mr,false,sizeof(mr));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mm,false,sizeof(mm));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(map,0,sizeof(map));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=9; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=1; j&lt;=9; j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%1d",&amp;map[i][j]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(map[i][j]==0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>point[count].x=i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>point[count].y=j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>point[count].num=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>count++;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mr[i][map[i][j]]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mc[j][map[i][j]]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mm[find(i,j)][map[i][j]]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dfs(0);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;count; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>map[point[i].x][point[i].y]=point[i].num;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=9; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=1; j&lt;=9; j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%d",map[i][j]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("\n");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>int dfs(int n)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,t;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(n&gt;=count)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>t=find(point[n].x,point[n].y);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=9; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(!mr[point[n].x][i] &amp;&amp; !mc[point[n].y][i] &amp;&amp; !mm[t][i])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mr[point[n].x][i]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mc[point[n].y][i]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mm[t][i]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>point[n].num=i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(dfs(n+1))</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mr[point[n].x][i]=false;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mc[point[n].y][i]=false;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mm[t][i]=false;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>point[n].num=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>int find(int x, int y)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int r,c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>r=x%3?(x/3+1):(x/3);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>c=y%3?(y/3+1):(y/3);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return (r-1)*3+c;</span></p>
<p><span>}</span></p>
<img src ="http://www.cppblog.com/linyangfei/aggbug/32718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2007-09-23 15:29 <a href="http://www.cppblog.com/linyangfei/archive/2007/09/23/32718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络流</title><link>http://www.cppblog.com/linyangfei/archive/2007/09/22/32675.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 22 Sep 2007 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2007/09/22/32675.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/32675.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2007/09/22/32675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/32675.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/32675.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>网络流</span></p>
<p><span>1273 </span><span>Drainage Ditches</span></p>
<p><span>这是一道比较单纯的网络流，题目要求只要求出源点到汇点的最大流就行了，而并不需要任何的建模抽象的东西，唯一一点要注意的是，要考虑有重边的情况。</span></p>
<p><span>这里我用的是增广路法求的最大流，流从源点</span><span>s</span><span>出发，用</span><span>BFS</span><span>找到一条增广路径，然后找这条路径上的最小值</span><span>min</span><span>，对增广路进行扩展，每一次扩展会使得</span><span>f[pre[i]][i]</span><span>的值增大，那么它的反向路径</span><span>f[i][pre[i]]</span><span>的值会减小，一直进行下去，直到找不到增广路为止，算法结束。</span></p>
<p><span>Source</span></p>
<p>&nbsp;</p>
<p><span>Problem Id:1273&nbsp;User Id:linyangfei </span></p>
<p><span>Memory:240K&nbsp;Time:15MS</span></p>
<p><span>Language:C++&nbsp;Result:Accepted</span></p>
<p>&nbsp;</p>
<p><span>Source </span></p>
<p>&nbsp;</p>
<p><span>#include &lt;stdio.h&gt;</span></p>
<p><span>#include &lt;string.h&gt;</span></p>
<p>&nbsp;</p>
<p><span>int n,m,pre[205];</span></p>
<p><span>int f[205][205];</span></p>
<p><span>bool mark[205];</span></p>
<p>&nbsp;</p>
<p><span>int bfs();</span></p>
<p><span>__int64 MaxFlow();</span></p>
<p>&nbsp;</p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,s,e,c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//freopen("1273.in","r",stdin);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(scanf("%d%d",&amp;m,&amp;n)!=EOF)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(f,0,sizeof(f));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;m; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d%d%d",&amp;s,&amp;e,&amp;c);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(f[s-1][e-1]==0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[s-1][e-1]=c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[s-1][e-1]+=c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%I64d\n",MaxFlow());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>int bfs()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int q[205],qt=0,qh=1,i,x,min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>q[qt]=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mark[0]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(qt&lt;qh)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x=q[qt];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(x==n-1)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min=100000000;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=n-1; pre[i]!=-1; i=pre[i])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min=f[pre[i]][i]&lt;min?f[pre[i]][i]:min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;n; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(!mark[i]&nbsp;&amp;&amp; f[x][i]&gt;0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>q[qh++]=i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mark[i]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=x;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>qt++;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>__int64 MaxFlow()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 maxflow=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mark,0,sizeof(mark));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;n; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=-1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(min=bfs())</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=n-1; pre[i]!=-1; i=pre[i])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[pre[i]][i]-=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[i][pre[i]]+=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>maxflow+=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mark,0,sizeof(mark));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;n; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=-1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return maxflow;<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span>}</span></p>
<p><span>1149 PIGS</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>也是一道很经典的网络流的题目，题目大意是</span><span>Mirko</span><span>有</span><span>M</span><span>个猪圈，猪圈里面有一定数量的猪，但他没有钥匙，而只有来买猪的顾客才会有一些特定房间的钥匙，每次顾客来之前，都跟</span><span>Mirko</span><span>预约好，所以</span><span>Mirko</span><span>的任务就是找出一个计划，使他能卖出最多数量的猪。对于每位顾客，</span><span>Mirko</span><span>可以选择卖出猪的数量，也可以在该顾客打开的猪圈间任意调整猪的数量，每个猪圈的容量无限大。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>我觉得这个问题的一个关键点是建模，如何建立一个网络流的模型很关键。我把所有的猪圈统一看成一个大的源点</span><span>S</span><span>，把每个顾客看成是一个节点，然后再人工地添加一个汇点。这样可以得出下面的路径关系。</span></p>
<p><span><span>1、&nbsp;</span></span><span>在先到的顾客和后到的顾客之间有一条路径，指向后到的顾客，这条路径的容量无限大。</span></p>
<p><span><span>2、&nbsp;</span></span><span>在源点有指向各个顾客的路径，路径的容量为顾客拥有的钥匙所能打开的猪圈的猪的总量，注意，当两个顾客拥有同一把钥匙的时候，猪圈的数量只能加到一个顾客节点的路径上，不能重复加，他们之间的转移关系就靠</span><span>1</span><span>中两顾客间容量无限大的路径来实现。</span></p>
<p><span>我想有了这两点，把网络流的模型建立起来后，求解的算法按照</span><span>1273</span><span>的模版就应该很容易了。</span></p>
<p><span>#include &lt;stdio.h&gt;</span></p>
<p><span>#include &lt;string.h&gt;</span></p>
<p>&nbsp;</p>
<p><span>const int INF=100000000;</span></p>
<p>&nbsp;</p>
<p><span>int f[105][105],pig[1005],key[1005][105],pre[105];</span></p>
<p><span>bool mark[105];</span></p>
<p><span>int m,n;</span></p>
<p>&nbsp;</p>
<p><span>int bfs();</span></p>
<p><span>int MaxFlow();</span></p>
<p>&nbsp;</p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,j,c,p,k;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>将猪圈看作一个大的源点</span><span>0</span><span>，再外加一个汇点</span><span>n+1</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>freopen("1149.txt","r",stdin);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(scanf("%d%d",&amp;m,&amp;n)!=EOF)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=m; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",&amp;pig[i]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(f,0,sizeof(f));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(key,0,sizeof(key));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=n; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",&amp;c);<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>每位顾客拥有钥匙的数量</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=1; j&lt;=c; j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",&amp;p);<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>输入每把钥匙的编号</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[0][i]+=pig[p];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>key[p][i]=1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pig[p]=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",&amp;c);<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>输入每位顾客需要猪的数量</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[i][n+1]=c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=m; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=1; j&lt;=n; j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(key[i][j])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(k=j+1; k&lt;=n; k++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(key[i][k])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[j][k]=INF;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%d\n",MaxFlow());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>int bfs()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int q[205],qt=0,qh=1,i,x,min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>q[qt]=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mark[0]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(qt&lt;qh)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x=q[qt];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(x==n+1)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min=100000000;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=n+1; pre[i]!=-1; i=pre[i])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min=f[pre[i]][i]&lt;min?f[pre[i]][i]:min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1; i&lt;=n+1; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(!mark[i]&nbsp;&amp;&amp; f[x][i]&gt;0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>q[qh++]=i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>mark[i]=true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=x;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>qt++;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>int MaxFlow()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int maxflow=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mark,0,sizeof(mark));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;=n+1; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=-1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(min=bfs())</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=n+1; pre[i]!=-1; i=pre[i])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[pre[i]][i]-=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[i][pre[i]]+=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>maxflow+=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(mark,0,sizeof(mark));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;=n+1; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pre[i]=-1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return maxflow;<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/linyangfei/aggbug/32675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2007-09-22 17:09 <a href="http://www.cppblog.com/linyangfei/archive/2007/09/22/32675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态规划专题</title><link>http://www.cppblog.com/linyangfei/archive/2007/09/22/32674.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 22 Sep 2007 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/linyangfei/archive/2007/09/22/32674.html</guid><wfw:comment>http://www.cppblog.com/linyangfei/comments/32674.html</wfw:comment><comments>http://www.cppblog.com/linyangfei/archive/2007/09/22/32674.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/linyangfei/comments/commentRss/32674.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linyangfei/services/trackbacks/32674.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>一、</span><span>1050 To the Max</span><span>：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这是我的第一个</span><span>DP</span><span>，题目的意思很简单，在一个矩阵里面找它的子矩阵，使得子矩阵数值之和到达最大。其实就是最大子段和问题在二维空间上的推广。先说一下一维的情况吧。设有数组</span><span>a0,a1&#8230;an,</span><span>找除其中连续的子段，使它们的和达到最大。最开始的想法，是枚举矩阵的长度，计算每个子矩阵的和，然后比较得出最大值，这样要消耗的时间为</span><span>O(n)</span><span>。让我们再想想，如果这个序列的每一个数都是整数，那么它们的最大子段和就是把所有的数相加。所以我们想要尽可能多地找到正数相加。在序列中有负数的情况下，从头开始扫描数组，把正数都相加，这其中可能会有负数，一种情况是：负数和减小子段和，但这时子段和仍然为正，用</span><span>sum</span><span>记录下连续子段和的最大值，继续想后扫描，因为后面有可能出现更大的正数的情况，会使和比原来没加负数之前更大；第二种情况是：加入一个负数后，是这个连续的子段和的值变成了负数，这时就要抛弃该负数以及该负数之前的所有序列，因为前面若有子段与后面构成了连续的子段，则这个子段一定会包括这个负数，而在这个负数之前的序列的和是个负数，那么这个子段的和一定不是最大的子段和。抛弃这个负数之前的序列后，子段和从这个负数后面的第一个数算起，继续扫描。</span></p>
<p><span>//</span><span>一维数组求最大字段</span></p>
<p><span>int submax1(int a[], int n)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int b=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int bn=-32767;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int sum=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0; i&lt;n; i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(b&gt;0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b+=a[i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else if(a[i]&gt;bn &amp;&amp; a[i]&lt;0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bn=a[i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b=a[i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b=a[i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(b&gt;sum)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sum=b;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(sum==0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return bn;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return sum;</span></p>
<p><span>}</span></p>
<p><span>其中变量</span><span>b</span><span>就是记录当前扫描过的子段和的，而</span><span>sum</span><span>记录的是子段和的最大值</span></p>
<p><span>二维的情况：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这里我使用了一个很简单的做法，在二维数组</span><span>a[i][j]</span><span>里面枚举第一维的长度</span><span>k</span><span>，然后得到一个</span><span>k*n</span><span>的子矩阵，把这个子矩阵的每一列数值相加，就把这个二维数组转化成了一维，再调用函数</span><span>int submax1(int a[], int n)</span><span>，就计算得出最大值。</span></p>
<p><span>总结：感觉我做这道题目还不是很像</span><span>DP</span><span>，只有在求一维情况下的</span><span>sum</span><span>记录最大值，以及在扫描是计算的子段和</span><span>b</span><span>，代表了某数前面连续的最大子段和。</span></p>
<p><span>二、</span><span>1579 Function Run Fun</span></p>
<p><span>这肯定是一个处心积虑的函数，没看出它有什么实际的用处</span></p>
<p><span>Consider a three-parameter recursive function w(a, b, c): <br>if a &lt;= 0 or b &lt;= 0 or c &lt;= 0, then w(a, b, c) returns: 1 <br>if a &gt; 20 or b &gt; 20 or c &gt; 20, then w(a, b, c) returns: w(20, 20, 20) <br>if a &lt; b and b &lt; c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) <br>otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)</span></p>
<p><span>这本身就是一个递归函数，要是按照函数本身写递归式，结果肯定是</span><span>TLE</span><span>，这里我开了一个三维数组，从</span><span>w(0,0,0)</span><span>开始递推，逐步产生到</span><span>w(20,20,20)</span><span>的值，复杂度</span><span>O(n^3)</span></p>
<p><span>总结：这道题是很地道的</span><span>DP</span><span>，因为它的子问题实在是太多了，但还是属于简单题目的范畴，就像把</span><span>fabonacci</span><span>函数增加到三维，限制条件多点而已，而实际上的做法都一样。</span></p>
<p><span>三、</span><span>1080 Humman Gene Function</span></p>
<p><span>应该说这是一道比较经典的</span><span>DP</span><span>，两串基因序列包含</span><span>A</span><span>、</span><span>C</span><span>、</span><span>G</span><span>、</span><span>T</span><span>，每两个字母间的匹配都会产生一个相似值，求基因序列（字符串）匹配的最大值。</span></p>
<p><span>感觉这题有点像求最长公共子序列。只不过把求最大长度改成了求最大的匹配值。用二维数组</span><span>m[i][j]</span><span>记录字符串</span><span>a</span><span>中的第</span><span>i</span><span>个字符与字符串</span><span>b</span><span>中的第</span><span>j</span><span>个字符匹配所产生的最大值。若字符串</span><span>a</span><span>的长度为</span><span>la</span><span>，字符串</span><span>b</span><span>的长度为</span><span>lb</span><span>，初始时</span><span>m[la][k](0&lt;=k&lt;=lb-1),</span><span>这里即为字符串</span><span>a</span><span>的末尾与</span><span>b</span><span>中的字符匹配，因为超过了字符串</span><span>a</span><span>的长度，所以匹配的时候只能时以空格</span><span>&#8217;-&#8217;</span><span>匹配。同理可产生</span><span>m[k][lb](0&lt;=k&lt;=la-1)</span><span>，的所有值，再以此往前递推，其状态转移方程为</span></p>
<p><span>m[i][j]=max{map[i][j]+m[i+1][j+1],m[&#8216;-&#8216;][j]+m[i][j+1],m[i][&#8216;-&#8217;]+m[i+1][j]}</span></p>
<p><span>所以最后</span><span>m[0][0]</span><span>即为所求。</span></p>
<p><span>四、</span><span>2533&nbsp;Longest Ordered Subsequence</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>很早以前就看过这题，求最大递增序列，那时刚刚晓得什么叫&#8220;动态规划&#8221;，是《算法设计与分析》（王晓东）上的一道习题，开始不会做。后来想了一种很笨的办法，用了</span><span>O(n^2)</span><span>的时间，还附加了</span><span>n^2</span><span>的空间。看了世铭的两种方法，一种是</span><span>O(n^2),</span><span>一种是</span><span>O(nlogn)</span><span>。两种方法核心的方法都一样，用一个</span><span>n</span><span>大小的一维空间</span><span>(a[n])</span><span>，</span><span>a[i]</span><span>表示子串长度为</span><span>i</span><span>时所有子串最大值中的最小值，因为要找一个</span><span>i</span><span>长度的子串，那么</span><span>a[i]</span><span>的值至少要比长度为</span><span>i-1</span><span>子串中的一个最末位的值要大。之所以会有两种时间复杂度的差别，就是在查找</span><span>i-1</span><span>长度的末尾值中的最小值的时候，前者是线性的搜索，后者是用的二分搜索，提高了时间效率。另外说一下这题的变形吧，</span><span>1631 Briging signals</span><span>，是有很多路由器搭线，要求求出互不相交的搭配的最大个数。细细分析一下题目，只要被匹配的路由器序号是一个递增的序列，则他们的连线就不会相交，就把这题转化为求最大递增序列的问题。但需要注意的是这题的问题规模</span><span>n</span><span>达到了</span><span>40000</span><span>，</span><span>Time Limit :1000MS</span><span>，所以在这里要选用刚才提到的</span><span>O(nlogn)</span><span>的算法，才不会导致</span><span>TLE</span><span>。</span></p>
<p><span>五、</span><span>1014 Dividing</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>实际上早就看到这题了，那时对</span><span>ACM</span><span>的认识还很幼稚，刚学完程序设计，学会怎么用递归，也不看题目的条件，反正就是六种</span><span>marble</span><span>，写了个递归的程序，测试数据当然能通过，但其结果肯定是</span><span>TLE</span><span>了。又过了一段时间，有了点时间效率的观念，写了个枚举法计算总和的</span><span>1/2</span><span>的可达性，不过还是有很多情况我都没有考虑到，结果</span><span>WA</span><span>了。到现在学</span><span>DP</span><span>，再来看想想这题，其实还有更好的解法。也是计算总和的</span><span>1/2(sum)</span><span>的可达性，如果</span><span>marble</span><span>的总数是</span><span>n</span><span>，则</span><span>DP</span><span>算法的时间复杂度可以达到</span><span>O(n*sum)</span><span>。用一个一维数组标记从</span><span>0</span><span>－</span><span>sum</span><span>所有加和的可达性，对于一颗宝石的价值</span><span>i</span><span>，数组</span><span>a[j]==true</span><span>，表示和为</span><span>j</span><span>可达，那么可得出</span></p>
<p><span>a[i+j]=true,</span><span>即</span><span>i+j</span><span>的值可达。循环以致于用完所有的宝石，观察</span><span>a[sum]</span><span>的值，</span><span>true</span><span>即为这些宝石可分，反之不可分。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>六、</span><span>2192 Zipper</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>又是一道字符串的动态规划题目，简述一下：给出三个字符串，</span><span>s1,s2,s3</span><span>，</span><span>s3</span><span>的长度为</span><span>s1</span><span>与</span><span>s2</span><span>长度之和，判断</span><span>s1</span><span>，</span><span>s2</span><span>是否为</span><span>s3</span><span>的不重合的公共子序列。其实就是判别公共之序列的升级版，把原来的一对一，改成了一对二。我用一个二维数组</span><span>mark[i][j]</span><span>记录</span><span>s1</span><span>中的第</span><span>i</span><span>个字符以及</span><span>s2</span><span>中的第</span><span>j</span><span>个字符能否与</span><span>s3[i+j]</span><span>想匹配。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>If(s1[i]==s3[i+j]) mark[i+1][j]=true;//s1</span><span>中的第</span><span>i</span><span>个字符匹配，则</span><span>s1</span><span>串向后移一个字符</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>If(s2[j]==s3[i+j]) mark[i][j+1]=true;//s2</span><span>中的第</span><span>j</span><span>个字符匹配，则</span><span>s2</span><span>串向后移一个字符</span></p>
<p><span>这样用</span><span>O(n^2)</span><span>的时间，递推能产生</span><span>mark[c1][c2]</span><span>的值，值为</span><span>true</span><span>输出即能够全部匹配。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>七、</span><span>2576 Tug of War</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>我觉得非常有必要做的一道题目。这道题目看似很简单，实质就是</span><span>n</span><span>个数，将其分成两堆，两堆数量的差距不超过</span><span>1</span><span>，并且使这两堆数字之和最接近。是一道动态规划题目，看起来简单是因为受了</span><span>1014</span><span>题的影响，但这题两堆的数目是确定的，一堆是</span><span>n/2</span><span>个，另一堆则是</span><span>n-n/2</span><span>个</span><span>,</span><span>而</span><span>1014</span><span>题是不受加和数目的影响的。这题也不同与多米勒骨牌那题，因为那题中各个数字之间是一一对应的。苦想了一天没有结果，看来这题还要寻求其它的方法。这题不是我自己想除来的，看了</span><span>alpc02</span><span>的代码，自己又照自己的理解重写了一遍。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>记录状态是用一个二维数组，</span><span>mark[i][j]</span><span>表示</span><span>i</span><span>个数相加，其值能否达到</span><span>j</span><span>，如果能</span><span>mark[i][j]</span><span>的为</span><span>true</span><span>。对于一个输入的数</span><span>w</span><span>，修改</span><span>i</span><span>个数的每一种状态，其状态转移方程：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>If(m[i][j]) then m[i][j+w]=true;//j+w</span><span>的值可由</span><span>j</span><span>的值加得</span></p>
<p><span>由后往前修改每一个</span><span>i</span><span>下的可达值。那么最后就只要再</span><span>n/2</span><span>行中找出</span><span>m[n/2][j]</span><span>的最大值（</span><span>j&lt;=total/2</span><span>），这就是两堆之和最接近的一组数值。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>八、</span><span>2441 Arrange the Bulls</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>这题里我看到了动态规划的一种新的方法。每头牛有自己喜欢的篮球场，我们的任务就是安排这些牛到它们喜欢的篮球场去，然后计算所有合理的解的数量（篮球场的数目最多</span><span>20</span><span>个）。显然，要找到一个解，很容易就能搜出，但是要求所有解的数量，如果再用搜索的方法，在时间上是不堪忍受的。这里用了一种新的方法（对于我来说是一种新方法</span><span>^_^</span><span>）。用二进制数记录当前篮球场使用的状态，&#8220;</span><st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="&#8221;" w:st="on"><span>1</span><span>&#8221;</span></st1:chmetcnv><span>表示未分配，&#8220;</span><st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="0" UnitName="&#8221;" w:st="on"><span>0</span><span>&#8221;</span></st1:chmetcnv><span>表示已分配，每个篮球场与每个数位相对应。所以</span><span>20</span><span>个篮球场就总共需要一个</span><span>1&lt;&lt;20</span><span>的数组来记录所有生成的状态。想到这里，我觉得这题基本上已经解决一半了，剩下的就是如何进行状态转移，用的就是二进制运算。我觉得我在这个方面一点都不熟悉，不会写，看了别人的代码，然后自己仿写了。</span></p>
<p><span>一种是用滚动数组，这种方法占用时间空间都较大，另一种是状态压缩的</span><span>DP</span><span>，方法比较巧妙。<em>呵呵，要讲得更深点，等我变成牛人在续吧&#8230;&#8230;</em></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>九、</span><span>2738 Two Ends</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>有点想博弈的题目，我事用</span><span>dp</span><span>来做的。有一组数，两个人分别轮流从数组两头取数，第一个取数的人可以选用任意的策略，第二个人则要一直使用贪心策略。问最后第一个人所取得的数字之和比第二个人取得的数字之和最多多多少。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>很容易想到</span><span>DP</span><span>，第二个人的取数规则是一定的，只有第一个个人可以选择，那么在第一个人取数的时候就有状态转移方程，</span><span>dp[i][j]</span><span>表示前面是第</span><span>i</span><span>个数后面是第</span><span>j</span><span>个数的时候第一个人所能得到数字和的最大值。</span></p>
<p><span>if(dp[i][j]+a[i]&gt;dp[i+1][j])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dp[i+1][j]=dp[i][j]+a[i];<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>取前面的数</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(dp[i][j]+a[j]&gt;dp[i][j-1])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dp[i][j-1]=dp[i][j]+a[j];<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>取后面的数</span></p>
<p><span>那么第二个人的状态转移就相对比较好确定了：</span></p>
<p><span>if(a[i]&lt;a[j] &amp;&amp; dp[i][j]!=-1 &amp;&amp; dp[i][j]&gt;dp[i][j-1])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dp[i][j-1]=dp[i][j];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(a[i]&gt;=a[j] &amp;&amp; dp[i][j]!=-1 &amp;&amp; dp[i][j]&gt;dp[i+1][j])</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dp[i+1][j]=dp[i][j];</span></p>
<p><span>最后一步只需比较</span><span>dp[i][i]</span><span>的值，选其中最大的出来就行了</span><span>^_^ </span></p>
<img src ="http://www.cppblog.com/linyangfei/aggbug/32674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linyangfei/" target="_blank">飞飞</a> 2007-09-22 17:06 <a href="http://www.cppblog.com/linyangfei/archive/2007/09/22/32674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>