﻿<?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++博客-Dragon</title><link>http://www.cppblog.com/Dragon521/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:12:05 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:12:05 GMT</pubDate><ttl>60</ttl><item><title>Dice Stacking</title><link>http://www.cppblog.com/Dragon521/archive/2010/08/09/122853.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Mon, 09 Aug 2010 14:05:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/08/09/122853.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/122853.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/08/09/122853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/122853.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/122853.html</trackback:ping><description><![CDATA[<p style="TEXT-ALIGN: center; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class=MsoNormal align=center><strong><span style="FONT-FAMILY: 'Arial','sans-serif'; COLOR: blue; FONT-SIZE: 18pt; mso-font-kerning: 0pt; mso-fareast-font-family: 宋体" lang=EN-US>Dice Stacking<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><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 style="Z-INDEX: -1; POSITION: absolute; TEXT-ALIGN: left; MARGIN-TOP: 42.5pt; WIDTH: 357pt; HEIGHT: 157.5pt; VISIBILITY: visible; MARGIN-LEFT: 96.95pt; LEFT: 0px; mso-wrap-style: square; mso-wrap-distance-left: 9pt; mso-wrap-distance-top: 0; mso-wrap-distance-right: 9pt; mso-wrap-distance-bottom: 0; mso-position-horizontal: absolute; mso-position-horizontal-relative: text; mso-position-vertical: absolute; mso-position-vertical-relative: text" id=图片_x0020_1 alt="http://acm.pku.edu.cn/JudgeOnline/images/2596_1.jpg" type="#_x0000_t75" o:spid="_x0000_s1026"><v:imagedata o:title="2596_1" src="file:///C:\Users\小志\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg"></v:imagedata><w:wrap type="square"></w:wrap></v:shape><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">【题目概述】罗骰子游戏，</span><span lang=EN-US><font face=Calibri>N</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">（</span><span lang=EN-US><font face=Calibri>1&lt;=N&lt;=10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">）个骰子，每个骰子有六个编号为</span><span lang=EN-US><font face=Calibri>0~5</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的面，现在要求把骰子罗成一摞，且要求两个骰子重叠的面的编号相等，求罗成的长方体四个侧面中最大面积的侧面的面子。</span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">【题目分析】将骰子罗列，求最大的侧面，还要求相邻两个骰子接触面编号相等？！该如何解决呢？看图，先来解决相邻的两个面编号相等的问题！有图得到</span><font face=Calibri> </font><span style="POSITION: relative; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 10.5pt; TOP: 4pt; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-text-raise: -4.0pt" lang=EN-US><v:shape style="WIDTH: 207pt; HEIGHT: 15.75pt" id=_x0000_i1025 type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\Users\小志\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" chromakey="white"><font size=3></font></v:imagedata></v:shape></span><span lang=EN-US><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;</font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">因此，可以很容易的判断一个面的对立面！第一个问题解决。</span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">题目中给出了这个条件是狠重要就是，就是一个骰子可以左右转动，这提示我们水平的四个面中编号最大的面总是可以转到一个面上的。由此，我们可以确定那个面和其余骰子接触的时候，确定这个骰子提供的最大的面积。</span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">确定这两个起初看是不确定的问题，下面的算法就是比较通俗的了。</span></p>
<p style="TEXT-INDENT: 0cm; MARGIN: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0" class=MsoListParagraph><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">设</span><span style="POSITION: relative; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 10.5pt; TOP: 4pt; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-text-raise: -4.0pt" lang=EN-US><v:shape style="WIDTH: 45pt; HEIGHT: 15.75pt" id=_x0000_i1025 type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\Users\小志\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png" chromakey="white"></v:imagedata></v:shape></span><span lang=EN-US><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;</font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">表示最大值，其中，</span><span lang=EN-US><font face=Calibri>i</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">为已放入的骰子，第</span><span lang=EN-US><font face=Calibri>j</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个骰子的第</span><span lang=EN-US><font face=Calibri>k</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个面朝上。则</span></p>
<p style="TEXT-INDENT: 0cm; MARGIN: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0" class=MsoListParagraph><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">若只放一个筛子，</span><span style="POSITION: relative; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 10.5pt; TOP: 4pt; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-text-raise: -4.0pt" lang=EN-US><v:shape style="WIDTH: 108pt; HEIGHT: 15.75pt" id=_x0000_i1025 type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\Users\小志\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png" chromakey="white"></v:imagedata></v:shape></span><span lang=EN-US><font face=Calibri>, </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">其中</span><span lang=EN-US><font face=Calibri>b[i][j]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">表示第</span><span lang=EN-US><font face=Calibri>i</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个骰子的第</span><span lang=EN-US><font face=Calibri>j</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">个面向上放置贡献的最大值，可以预处理的时候求出。</span></p>
<p style="TEXT-INDENT: 0cm; MARGIN: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0" class=MsoListParagraph><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">对于已放置的骰子，可以转移到为放置的上面，所以，枚举合法的状态，然后添加骰子，同时更新状态值。</span></p>
<p style="TEXT-INDENT: 0cm; MARGIN: 0cm 0cm 0pt 21pt; mso-char-indent-count: 0" class=MsoListParagraph><span style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US><v:shape style="WIDTH: 168pt; HEIGHT: 15.75pt" id=_x0000_i1025 type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\Users\小志\AppData\Local\Temp\msohtmlclip1\01\clip_image008.png" chromakey="white"><font size=3></font></v:imagedata></v:shape></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">【详细代码】下面是</span><span lang=EN-US><font face=Calibri>AC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的代码。</span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>//Name: pku_2596_Dice Stacking<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>#include &lt;iostream&gt;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>using namespace std;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>#define max(a, b)((a)=((a)&gt;(b)?(a):(b)))<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>const int f[6]={5,4,3,2,1,0};<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>int a[10][10], b[10][10];<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>int dp[1&lt;&lt;10][10][6], n, ans;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>int main() {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>//freopen("in.in", "r", stdin);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>int ca, i, j, k, p, q, t, kn;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>scanf("%d", &amp;ca);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>while(ca-- &amp;&amp; scanf("%d", &amp;n)) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>kn = 1&lt;&lt;n;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(b, 0, sizeof(b));<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i = 0; i &lt; n; i++) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j = 0; j &lt; 6; j++) scanf("%d",a[i]+j);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j = 0; j &lt; 6; j++) <o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(k = 0; k &lt; 6; k++) if(k!=j &amp;&amp; k != f[j])<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>max(b[i][j], a[i][k]);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(dp, -1, sizeof(dp));<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i = 0; i &lt; n; i++)<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j = 0; j &lt; 6; j++) dp[1&lt;&lt;i][i][j] = b[i][j];<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i = 0; i &lt; kn; i++) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j = 0; j &lt; n; j++) { <o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (k = 0; k &lt; 6; k++) if(dp[i][j][k] != -1) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(p = 0; p &lt; n; p++) if(!(i &amp; (1&lt;&lt;p))) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&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 (q = 0; q &lt; 6; q++) if(a[j][k] == a[p][f[q]]) {<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&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>t = i|(1&lt;&lt;p);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&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>max(dp[t][p][q], dp[i][j][k] + b[p][q]);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}//ifq<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}//ifp<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}//ifk<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}//fj<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}//fi<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans = 0;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i = 0; i &lt; n; i++) <o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j = 0; j &lt; 6; j++) max(ans, dp[kn-1][i][j]);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%d\n", ans);<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>return 0;<o:p></o:p></span></p>
<p style="TEXT-INDENT: 12pt; MARGIN: 0cm 0cm 0pt; BACKGROUND: ivory; mso-char-indent-count: 1.0; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: darkred; FONT-SIZE: 12pt; mso-bidi-font-family: 宋体" lang=EN-US>}<o:p></o:p></span></p>
<img src ="http://www.cppblog.com/Dragon521/aggbug/122853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-08-09 22:05 <a href="http://www.cppblog.com/Dragon521/archive/2010/08/09/122853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku_3254_Corn Fields</title><link>http://www.cppblog.com/Dragon521/archive/2010/08/09/122758.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Mon, 09 Aug 2010 04:26:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/08/09/122758.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/122758.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/08/09/122758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/122758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/122758.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><span>pku_3254_Corn Fields</span></p>
<p><span>【题目概述】告诉平面上一些点，从中选择部分点出来，要求不能选择相邻的点，求所有的方案数。</span></p>
<p><span>【题目分析】学过</span><span>gohst</span><span>—</span><span>wei</span><span>的代码风格之后，第一道小练兵。花的时间虽然长了点，但是，感觉还不错。</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>首先还是分析采取由上而下，逐行分析的策略。</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>我们发现，影响当前行的状态的只有上一行，即上一行和下一行的要满足相邻不相等原则。</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>设</span><span> </span><span>表示前</span><span>i</span><span>行的方案数，且第</span><span>i</span><span>行的状态为</span><span>s. </span></p>
<p><span>转移方程：</span></p>
<p>&#160;</p>
<p><span>（其中，</span><span>t</span><span>为上一行的某个与当前行不相冲突的状态）</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>时间复杂度为</span><span> </span><span>显然这样的复杂度为不满足条件的。因此需要优化</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>我们发现，题目中有一个限制的条件是没用到的。就是同一行也不满足相邻不可取的。由此，我们可以实现预处理，剔除掉多余的状态，这样，最后的每行合法的状态，最多只有</span><span>367</span><span>个。</span></p>
<p><span>【题目代码】下面是</span><span>AC</span><span>的代码。</span></p>
<p><span>//Name: pku_3254_Corn Fields</span></p>
<p><span>#include &lt;iostream&gt;</span></p>
<p><span>using namespace std;</span></p>
<p><span>const int maxs = 1&lt;&lt;12;</span></p>
<p><span>const int mod = 100000000;</span></p>
<p><span>int map[13][13], n, m;</span></p>
<p><span>int stk[maxs], sn;</span></p>
<p><span>int dp[2][maxs];</span></p>
<p><span>inline bool one(int i, int j) { return (i&amp;(~(1&lt;&lt;j))) != i;}</span></p>
<p><span>bool check(int i, int j) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>if (j &gt; 0 &amp;&amp; one(i, j-1)) return 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>if (j &lt; m-1 &amp;&amp; one(i, j+1)) return 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return 1;</span></p>
<p><span>}</span></p>
<p><span>void Proced(int km, int m) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>sn = 0; int i, j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>for (i = 0,j; i &lt; km; i++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j = 0; j &lt; m; j++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(one(i, j) &amp;&amp; !check(i,j)) break;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (j == m) stk[sn++] = i;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp; </span>// for (i = 0; i &lt; sn; i++) printf("stk[%d] = %d\n", i, stk[i]);</span></p>
<p><span>}</span></p>
<p><span>void SCDP() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>int i, j, s1, s2, k1, k2, e1 = 0, e2 = 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>for (j = 0; j &lt; sn; j++) dp[0][stk[j]] = 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>dp[0][0] = 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>for (i = 1; i &lt;= n; i++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j = 0; j &lt; sn; j++) dp[e2][stk[j]] = 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (k1 = 0; k1 &lt; sn; k1++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (k2 = 0; k2 &lt; sn; k2++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>s1 = stk[k1]; s2 = stk[k2];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(s1 &amp; s2)continue;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j = 0; j &lt; m; 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; </span>if (!map[i][j] &amp;&amp; one(s2, j)) break;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (j == m) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dp[e2][s2] = (dp[e2][s2]+dp[e1][s1])%mod;</span></p>
<p><span><span>&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; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>e1 ^= 1; e2 ^= 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>int ans = 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>for (k1 = 0; k1 &lt; sn; k1++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans = (ans + dp[e1][stk[k1]])%mod;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>printf("%d\n", ans);</span></p>
<p><span>}</span></p>
<p><span>int main() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>freopen("in.in", "r", stdin);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>scanf("%d %d", &amp;n, &amp;m);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>Proced(1&lt;&lt;m, m);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>for(int i = 1; i &lt;= n; i++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int j = 0; j &lt; m; j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d", map[i]+j);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>SCDP();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<img src ="http://www.cppblog.com/Dragon521/aggbug/122758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-08-09 12:26 <a href="http://www.cppblog.com/Dragon521/archive/2010/08/09/122758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku_1699_Best Sequence</title><link>http://www.cppblog.com/Dragon521/archive/2010/08/08/122660.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Sun, 08 Aug 2010 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/08/08/122660.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/122660.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/08/08/122660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/122660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/122660.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>pku_1699_Best Sequence</span></p>
<div>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><span>【题目概述】求<span>N</span>（<span>N&lt;=10</span>）个子串的最短和串，且不会发生一个</span><span>完全包涵</span><span>另外一个的现象。</span></p>
<p><span>【题目分析】简单的状态<span>DP</span>问题，一开始想用字符串的思想解决，发现状态之间，不好变换。正好自己做压缩<span>DP</span>的专题，还是，用这个方法吧！</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>对于每个字符串的放置，和她有直接影响的是上一个字符的放置情况。由此，我们可以建立一个状态转移方程</span></p>
<p><span>设</span><span> </span><span>&nbsp;</span><span>表示当前状态</span><span>s</span><span>以第</span><span>i</span><span>个字符串结尾产生的最小和串的长度。则</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>若</span><span>s</span><span>只包含一个串的时候，</span><span> </span><span>其中</span><span>len[i]</span><span>表示第</span><span>i</span><span>个子串的长度。</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>否则，如果当前的状态合法，且</span><span>s</span><span>状态集中，不包含有</span><span>j</span><span>串，那么</span><span>,</span><span>，</span> <span>记</span> </p>
<p><span><span>a)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>如果</span><span> </span><span>其中，</span><span>com[I, j] </span><span>表示第</span><span>i</span><span>个串之后是第</span><span>j</span><span>个串的公共子串的长度。</span></p>
<p><span><span>b)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>否则，不处理。</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>最后的结果就是，</span><span> </span><span><span>&nbsp;&nbsp; </span>i</span><span>是所有的子串。</span></p>
<p><span>【题目代码】：</span></p>
<p><span>//Name: pku_1699_Best Sequence</span></p>
<p><span>#include</span><span> <span>&lt;iostream&gt;</span></span></p>
<p><span>#include</span><span> <span>&lt;cstring&gt;</span></span></p>
<p><span>using</span><span> <span>namespace</span> <span>std</span>;</span></p>
<p><span>const</span><span> <span>int</span> <span>inf</span> = 1&lt;&lt;20;</span></p>
<p><span>const</span><span> <span>int</span> <span>maxn</span> = 1&lt;&lt;10;</span></p>
<p><span>char</span><span> <span>str</span>[10][20];</span></p>
<p><span>int</span><span> <span>len</span>[10], <span>com</span>[20][20], <span>n</span>, <span>m</span>;</span></p>
<p><span>int</span><span> <span>dp</span>[<span>maxn</span>][10], <span>ans</span>;</span></p>
<p><span>void</span><span> <span>Link</span>(<span>int</span> <span>x</span>, <span>int</span> <span>y</span>) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>int</span> <span>i</span>, <span>j</span>, <span>k</span>, <span>mlen</span> = <span>min</span>(<span>len</span>[<span>x</span>], <span>len</span>[<span>y</span>]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>k</span> = <span>mlen</span>; <span>k</span> &gt;= 0; <span>k</span>--) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = <span>len</span>[<span>x</span>]-<span>k</span>, <span>j</span> = 0; <span>i</span> &lt; <span>len</span>[<span>x</span>]; <span>i</span>++, <span>j</span>++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (<span>str</span>[<span>x</span>][<span>i</span>] != <span>str</span>[<span>y</span>][<span>j</span>]) <span>break</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (<span>i</span> == <span>len</span>[<span>x</span>]) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>com</span>[<span>x</span>][<span>y</span>] = <span>k</span>; <span>break</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>k</span> = <span>mlen</span>; <span>k</span> &gt;= 0; <span>k</span>--) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = <span>len</span>[<span>y</span>]-<span>k</span>, <span>j</span> = 0; <span>i</span> &lt; <span>len</span>[<span>y</span>]; <span>i</span>++, <span>j</span>++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (<span>str</span>[<span>y</span>][<span>i</span>] != <span>str</span>[<span>x</span>][<span>j</span>]) <span>break</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (<span>i</span> == <span>len</span>[<span>y</span>]) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>com</span>[<span>y</span>][<span>x</span>] = <span>k</span>; <span>break</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span>}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span>int</span><span> <span>main</span>() {</span></p>
<p><span><span>&nbsp;&nbsp; </span><span>// freopen("in.in", "r", stdin);</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>int</span> <span>t</span>, <span>i</span>, <span>j</span>, <span>s</span>, <span>r</span>; <span>scanf</span>(<span>"%d"</span>, &amp;<span>t</span>);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>while</span>(<span>t</span>-- &amp;&amp; <span>scanf</span>(<span>"%d"</span>, &amp;<span>n</span>)) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>memset</span>(<span>com</span>, 0, <span>sizeof</span>(<span>com</span>));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>n</span>; <span>i</span>++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>scanf</span>(<span>"%s"</span>, <span>str</span>+<span>i</span>);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>len</span>[<span>i</span>] = <span>strlen</span>(<span>str</span>[<span>i</span>]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>j</span> = 0; <span>j</span> &lt; <span>i</span>; <span>j</span>++) <span>Link</span>(<span>i</span>, <span>j</span>);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>// for(i = 1; i &lt; n; i++) printf("%d\n", com[i-1][i]);</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 1; <span>i</span> &lt; 1&lt;&lt;<span>n</span>; <span>i</span>++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>j</span> = 0; <span>j</span> &lt; <span>n</span>; <span>j</span>++) <span>dp</span>[<span>i</span>][<span>j</span>] = <span>inf</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>n</span>; <span>i</span>++) <span>dp</span>[1&lt;&lt;<span>i</span>][<span>i</span>] = <span>len</span>[<span>i</span>];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>s</span> = 1; <span>s</span> &lt; 1&lt;&lt;<span>n</span>; <span>s</span>++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = 0; <span>i</span>&nbsp;&lt; <span>n</span>; <span>i</span>++) <span>if</span>(<span>s</span>&amp;(1&lt;&lt;<span>i</span>)) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>j</span> = 0; <span>j</span> &lt; <span>n</span>; <span>j</span>++) <span>if</span>(<span>i</span>!=<span>j</span> &amp;&amp; !(<span>s</span>&amp;(1&lt;&lt;<span>j</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; </span><span>r</span> = <span>s</span>|(1&lt;&lt;<span>j</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; </span><span>dp</span>[<span>r</span>][<span>j</span>] = <span>min</span>(<span>dp</span>[<span>r</span>][<span>j</span>], <span>dp</span>[<span>s</span>][<span>i</span>] - <span>com</span>[<span>i</span>][<span>j</span>] + <span>len</span>[<span>j</span>]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//&nbsp;printf("dp[%d][%d] = %d\n", r, j, dp[r][j]);</span></span></p>
<p><span><span>&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; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//&nbsp;for(i = 0; i &lt; n; i++) printf("%d\n", dp[s-1][i]);</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>ans</span> = <span>inf</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>n</span>; <span>i</span>++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (<span>dp</span>[<span>s</span>-1][<span>i</span>] &lt; <span>ans</span>) <span>ans</span> = <span>dp</span>[<span>s</span>-1][<span>i</span>];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>printf</span>(<span>"%d\n"</span>, <span>ans</span>);</span></p>
<p><span><span>&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp; </span><span>return</span> 0;</span></p>
<p><span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<img src ="http://www.cppblog.com/Dragon521/aggbug/122660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-08-08 16:05 <a href="http://www.cppblog.com/Dragon521/archive/2010/08/08/122660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku_2686_Traveling by Stagecoach</title><link>http://www.cppblog.com/Dragon521/archive/2010/08/08/122645.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Sun, 08 Aug 2010 06:01:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/08/08/122645.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/122645.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/08/08/122645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/122645.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/122645.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>Traveling by Stagecoach</span></p>
<div>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><span>【题目概述】告诉一张地图，地图上有</span><span>N(2&lt;=2&lt;= 30)</span><span>个城市，由一个城市到另外一个城市的唯一交通工具是马车，不同型号的马车花费的时间（这里的时间计算用两地的距离除以该马车骂的数量，马越多越快）不一样。现在给你</span><span>N(1&lt;=N&lt;=8)</span><span>两马晨，每辆马车告诉马的数量，求有一个城市到另外一个城市的最短时间。</span></p>
<p><span>【题目分析】参考了</span><span>hobby</span><span>的代码，和</span><span>froeverLin</span><span>提示，在这里予以说明。</span></p>
<p><span><span>l&nbsp;</span></span><span>像是一个最短路问题，但是增加了限制条件，解法</span><span>DP</span><span>毋庸置疑，给定马车的数量</span><span>&lt;= 8</span><span>，</span> <span>状态压缩</span><span>DP.</span></p>
<p><span><span>l&nbsp;</span></span><span>要求的仅仅是最短的时间，没有求分配方案，这无疑使问题简单话了。</span></p>
<p><span><span>l&nbsp;</span></span><span>影响节点（城市）之间的花费的唯一变化因素是马的数量（距离是固定的）。</span></p>
<p><span><span>l&nbsp;</span></span><span>&nbsp;</span><span>设</span><span> </span><span>表示当前状态为</span><span>s</span><span>，走到城市</span><span>j</span><span>的最小时间。</span></p>
<p><span>状态转移方程，为</span> <span>对于任何一个与</span><span>j</span><span>相连的节点</span><span>k</span><span>。</span></p>
<p>&#160;</p>
<p><span>其中，</span><span> r</span><span>为和</span><span>k</span><span>相连的城市，</span><span> r</span><span>为不在</span><span>s</span><span>中的某个马车的加入后的状态，</span> <span>t[w]</span><span>为该马车的马匹数。</span></p>
<p><span><span>l&nbsp;</span></span><span>初始化问题。</span></p>
<p><span><span>n&nbsp;</span></span><span>由于求的是最小值，我们初始化</span><span>dp</span><span>为某个最大值。</span></p>
<p><span>for</span><span>(<span>p</span> = 1; <span>p</span> &lt; (1&lt;&lt;<span>n</span>); <span>p</span>++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>m</span>; <span>i</span>++) <span>dp</span>[<span>p</span>][<span>i</span>] = <span>inf</span>; </span></p>
<p>&nbsp;</p>
<p><span><span>n&nbsp;</span></span><span>由于每次都是从</span><span>a</span><span>开始的，所以初始化的时候要初始化和</span><span>a</span><span>与关系的边的转移。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = 0; <span>i</span> &lt; <span>m</span>; <span>i</span>++) <span>if</span>(<span>map</span>[<span>a</span>][<span>i</span>] != -1) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>k</span> = 0; <span>k</span> &lt; <span>n</span>; <span>k</span>++)&nbsp;<span>dp</span>[1&lt;&lt;<span>k</span>][<span>i</span>] = <span>map</span>[<span>a</span>][<span>i</span>]/<span>t</span>[<span>k</span>];</span></p>
<p><span>【题目代码】</span></p>
<p><span>//Name: pku_2686_Traveling by Stagecoach</span></p>
<p><span>// dp[i][j]</span><span>表示当前使用的票的状态为<span>i</span>到达了<span>j</span>城市的最少用时</span></p>
<p><span>// </span><span>若第<span>k</span>个城市与<span>j</span>相连通，且，枚举枚举票数最少的</span></p>
<p><span>#include</span><span> <span>&lt;iostream&gt;</span></span></p>
<p><span>using</span><span> <span>namespace</span> <span>std</span>;</span></p>
<p><span>#define</span><span> <span>inf</span> 1&lt;&lt;30</span></p>
<p><span>int</span><span> <span>map</span>[30][30];</span></p>
<p><span>int</span><span> <span>n</span>, <span>m</span>, <span>p</span>, <span>a</span>, <span>b</span>, <span>d</span>, <span>r</span>, <span>q</span>;</span></p>
<p><span>double</span><span> <span>dp</span>[1&lt;&lt;8][30], <span>t</span>[30], <span>tmp</span>, <span>ans</span>;</span></p>
<p><span>int</span><span> <span>main</span>() {</span></p>
<p><span><span>&nbsp;&nbsp; </span><span>// freopen("in.in", "r", stdin);</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>int</span> <span>i</span>, <span>j</span>, <span>k</span>, <span>x</span>, <span>y</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>while</span>(<span>scanf</span>(<span>"%d%d%d%d%d"</span>,&amp;<span>n</span>,&amp;<span>m</span>,&amp;<span>p</span>,&amp;<span>a</span>,&amp;<span>b</span>) != <span>EOF</span>) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (!(<span>n</span>||<span>m</span>||<span>p</span>||<span>a</span>||<span>b</span>)) <span>break</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>a</span>--; <span>b</span>--;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>n</span>; <span>i</span>++) <span>scanf</span>(<span>"%lf"</span>, <span>t</span>+<span>i</span>);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>memset</span>(<span>map</span>, -1,<span>sizeof</span>(<span>map</span>));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = 1; <span>i</span> &lt;= <span>p</span>; <span>i</span>++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>scanf</span>(<span>"%d %d %d"</span>, &amp;<span>x</span>, &amp;<span>y</span>, &amp;<span>d</span>); <span>x</span>--;<span>y</span>--;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>map</span>[<span>x</span>][<span>y</span>] = <span>map</span>[<span>y</span>][<span>x</span>] = <span>d</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>p</span> = 1; <span>p</span> &lt; (1&lt;&lt;<span>n</span>); <span>p</span>++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>i</span> = 0; <span>i</span> &lt; <span>m</span>; <span>i</span>++) <span>dp</span>[<span>p</span>][<span>i</span>] = <span>inf</span>; </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>i</span> = 0; <span>i</span> &lt; <span>m</span>; <span>i</span>++) <span>if</span>(<span>map</span>[<span>a</span>][<span>i</span>] != -1) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span>(<span>k</span> = 0; <span>k</span> &lt; <span>n</span>; <span>k</span>++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>dp</span>[1&lt;&lt;<span>k</span>][<span>i</span>] = <span>map</span>[<span>a</span>][<span>i</span>]/<span>t</span>[<span>k</span>];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>p</span> = 1; <span>p</span> &lt; (1&lt;&lt;<span>n</span>); <span>p</span>++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>j</span> = 0; <span>j</span> &lt; <span>m</span>; <span>j</span>++) <span>if</span>(<span>dp</span>[<span>p</span>][<span>j</span>] != <span>inf</span>) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>k</span> = 0; <span>k</span> &lt; <span>m</span>; <span>k</span>++) <span>if</span>(<span>k</span>!=<span>j</span> &amp;&amp; <span>map</span>[<span>j</span>][<span>k</span>]!=-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; </span><span>for</span> (<span>r</span> = 0; <span>r</span> &lt; <span>n</span>; <span>r</span>++) <span>if</span>(!(<span>p</span>&amp;(1&lt;&lt;<span>r</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; </span><span>q</span> = <span>p</span> + (1&lt;&lt;<span>r</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; </span><span>tmp</span> = <span>dp</span>[<span>p</span>][<span>j</span>] + <span>map</span>[<span>j</span>][<span>k</span>] /<span>t</span>[<span>r</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; </span><span>if</span> (<span>dp</span>[<span>q</span>][<span>k</span>] &gt; <span>tmp</span>) <span>dp</span>[<span>q</span>][<span>k</span>] = <span>tmp</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; </span>}</span></p>
<p><span><span>&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; </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><span>ans</span> = <span>inf</span>;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span> (<span>p</span> = 1; <span>p</span> &lt; (1&lt;&lt;<span>n</span>); <span>p</span>++) </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span>(<span>dp</span>[<span>p</span>][<span>b</span>] &lt; <span>ans</span>) <span>ans</span> = <span>dp</span>[<span>p</span>][<span>b</span>];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span>(<span>ans</span> == <span>inf</span>) <span>printf</span>(<span>"Impossible\n"</span>);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>else</span> <span>printf</span>(<span>"%lf\n"</span>, <span>ans</span>);</span></p>
<p><span><span>&nbsp;&nbsp; </span>}</span></p>
<p><span>}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<img src ="http://www.cppblog.com/Dragon521/aggbug/122645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-08-08 14:01 <a href="http://www.cppblog.com/Dragon521/archive/2010/08/08/122645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回首</title><link>http://www.cppblog.com/Dragon521/archive/2010/06/13/117817.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Sun, 13 Jun 2010 12:52:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/06/13/117817.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/117817.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/06/13/117817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/117817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/117817.html</trackback:ping><description><![CDATA[<p><img class=blog_music onresizestart="return false;" src="http://ctc.qzs.qq.com/ac/b.gif" _cacheID="0.737585331222719">
<table style="WIDTH: auto; TABLE-LAYOUT: fixed; FONT-SIZE: 1px" class=i border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
    <tbody>
        <tr>
            <td vAlign=top width="1%" noWrap>&nbsp;</td>
            <td vAlign=top width="1%" noWrap>&nbsp;</td>
            <td style="WIDTH: 99%; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: right top" height=90 vAlign=top noWrap align=right>
            <p align=left><br>　　</p>
            </td>
        </tr>
    </tbody>
</table>
<table style="WIDTH: auto; TABLE-LAYOUT: fixed; FONT-SIZE: 1px" class=i border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#fdecb4 align=center height=344>
    <tbody>
        <tr>
            <td vAlign=top width=40>
            <p align=center>&nbsp;</p>
            </td>
            <td style="LINE-HEIGHT: 30px; COLOR: #000; FONT-SIZE: 12px" vAlign=top align=left>
            <div align=center>&nbsp;</div>
            <p align=center>再回首</p>
            <p align=left>再回首/ 云遮断归途/&nbsp; 再回首/&nbsp; 荆棘密布/ 今夜不会再有难舍的旧梦 / 曾经与你共有的梦 /&nbsp; 今后要向谁诉说<br>再回首/ 背影已远走/&nbsp; 再回首/ 泪眼朦胧/ 留下你的祝福/&nbsp; 寒夜温暖我/ 不管明天要面对多少伤痛和迷惑<br>曾经在幽幽暗暗反反复复中追问/ 才知道平平淡淡从从容容是最真/&nbsp; 再回首恍然如梦 /&nbsp;&nbsp; 再回首我心依旧/&nbsp;&nbsp; 只有那无尽的长路伴着我 </p>
            <p align=left>　　　　想了解我的，就读一下这篇文章了，读之前请先打开音乐-《回首》听一遍！</p>
            <p align=left>偶然听到这首歌----《再回首》，感觉这首歌的旋律是那么的柔，让我一阵之后，心中积聚的情感再也无法控制，像洪水般要爆发出来！回首，当歌词一次次的重复这个词的时候，自己内心的深处有许多东西在蠕动---是记忆！ 以前有过，但是没有那么的强烈过！也许是时候&#8220;回首&#8221;一下了！</p>
            <p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我是一个不善于处理情感的人，当想&#8220;回首&#8221;一下的时候，反而发现不知道从哪里开始了，脑子里一团乱麻！就沿着我上学的线路，来回首一下！（认识我的兄弟，别嫌我唠叨，我给自己听的！不习惯，堵上耳朵！）</p>
            <p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小学的记忆是珍贵的，因为太少了,大多的都忘记了！（感慨岁月的强大杀伤力！）记得我踏进校园的校门的时候，是我的&#8220;虎子哥&#8221;领着我去的！，那时候的自己像只野猴子（听我虎子哥说的），整天穿上串下的，还记得第一次踏进校门的时候那种&#8220;骄傲的&#8221;心情，有一种无法言喻的自豪感！还记得校门上&#8220;好好学习，天天向上&#8221;那八个打字（虽然有些锈迹了，但是对我来书那里面是那么的神秘！终于，自己怀着一个&#8220;探秘&#8221;的目的，就那么的走进去了！给我登记的校长，姓吴吧，忘不了他！我去报名的时候，他们几个&#8220;大人&#8221;正在吃西瓜！我站到他面前的时候，两眼直勾勾的盯着他手里的习惯，他可能感觉尴尬啦，连忙说&#8220;小家伙，来吃块！&#8220;，但是我果断而且坚决的拒绝了！他说我有礼貌，而实际上呢？现在可以说了，&#8221;他给我的是西瓜有一多半是生的，你让我吃，我傻啊!！&#8221;呵呵</p>
            <p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小学的记忆是短暂的，但是，仅有的记忆都是甜美的！我这辈子也不会忘记，因为那里有我太多童年的欢笑了！ 提一下我小学的哥们儿，</p>
            <p align=left>国华——我小学的铁哥们，胖胖的，为人热情，爱打抱不平，小学里帮了我不少！</p>
            <p align=left>张琦——挺好的名字，好朋友！我们一起度过了不少时光！</p>
            <p align=left>腾，凯，才，我一辈子的朋友！</p>
            <p align=left>还有几个不是很俗的，但是给我影响很大的！我小学的班长（何：当了五年的班长，辛苦她了！），挺敬佩她的，一个小女孩把一群&#8220;小野孩子&#8221;管住，不容易啊！刘：对不住她的，曾把她惹哭了，还叫了她家长！（后话，她成了我高中同学！）徐：后话了！</p>
            <p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要停顿，让我们继续往前走！到初中了！初中的时候，是我学习最刻苦的时候（不是我说的，朋友们说的，其实我没感觉）。在初中，我遇到了给我启发最大的，影响最深的老师，Mr 徐， Mr 焦！徐老是我的老班，所以他对我要求是很严的，但是给我的启迪也是最大的！我不是一个聪明的人，但是，我那时候是一个勤奋的人！他告诉我的&#8220;宝剑锋从磨砺出，梅花香自苦寒来！&#8221;。那时候的自己比现在懂得那是什么意思！现在想想挺佩服自己的毅力的！因为我做到了别人做不到的，所以也得到了别人得不到了（不是对聪明人说的，我说的是像我一样愚钝的人）。焦老，怎么说呢？徐老是打我最重的人，他是骂我最狠的！（事实如此）!还记得一件事，那时候我的字体写的小，（他可能是想让我写大些）有一次上课就在课上，在黑板上用粉笔花了一个大大的&#8220;田&#8221;字（以前的作业本），然后用粉笔写了三个小小小的三个字（我名字，绝对是讽刺，还好是我，心里素质那么好的，要不估计早&#8220;以头强地"了！）但是我还是从他身上学到了对自己的严格要求，这让我受用终身的！）我不会忘记他们！将来有时候回去看看，学校是没了，但是师生情还在！</p>
            <p align=left>　　&nbsp;&nbsp; 初中的朋友就相对较多了，而且还交到了我一辈子的&#8220;兄弟&#8221;（别笑，我没夸大，财神爷面前扣过头，邵国香的！我老大，小义老二，鲁子老三），我么一起度过了很多快乐美好的时光，而且由无尽的欢声笑语，让我的初中生活是那么的令人难忘！虽然后来我们分开了，但是，兄弟情谊是斩不断的！I Believe I Can! 还有没磕过头，但是关系同样很好的，几个：阿胡（讲义气的好哥们），小朱（同样的好朋友）！菲，环，同样的好&#8220;兄弟"(两个女生，叫兄弟是说关系好，别误会！）还得提一下：小超，班里最会搞的，给我带来了很多欢笑！ 还有很多，就不说啦，他们也是我的好朋友！</p>
            <p align=left>　　　　初中的生活是充实的，是充满欢笑的，但是，也还有一些无法弥补的遗憾了!以前的自己只喜欢整天埋在书里，所以，错过了好多，也无言里伤过了一些人！我知道一句&#8220;对不起&#8221;，是还不回来什么的，但是，却是我心里憋了几年的话，好几次想说来着，却又怕提起了，反而更伤心！用电影里的一具对白：让她留在记忆里吧！Wish you have a happiness life , 徐！</p>
            <p align=left>　　　 抛开惆怅，抛开多情！我离开了初中，来到了高中！高中的生活应该说是记忆里最清晰的，但是，那却是我最不愿意记起的！高中的生活，我的从山顶跌倒了山底！心中的压抑，郁闷，堕落，自暴自弃&#8230;&#8230;一切不好的词，都可以用来形容我的！这时我走到了背叛的顶峰，仿佛这个世界的一切都是我的眼中刺，不顺眼！当然，所谓&#8220;成绩&#8221;也不是很好！上不去，又下不来，我就在那里挂着！压力也很大！但是很危险的，因为一旦导火索被点燃，将一发不可收拾！终于，高二，奶奶的去世，让我彻底的崩溃了！我彻底的失去了信心！一个人什么时候最可怕，就是他对自己失去信心的时候！但是我是幸运的，当我最绝望的时候，她的安慰让我稍感舒适！渐渐的淡忘了！等我彻底清醒的时候，已经是高三的下半学期，升学的压力有一次压到了我肩上！还好自己还可以努力！</p>
            <p align=left>　　　　第一次的失败，让我第二次觉悟！代价高了点，但是挺过来了！回忆就离不开人的！这个人，是我这辈子都可以交心的，建康，我的挚友！陪我走过三年路程的人！而且始终是在支持物哦的人！好兄弟，兄弟我什么也不说了！ 鹏，让我叫你声哥，不亏！ 芳，谢谢你！英语老师，谢谢你给我勇气，让我勇于面对！学生不会忘记您！生物老师（我复读的时候的老师），谢谢你的鼓励！</p>
            <p align=left>　　　　人生的完美就在于她的不完美！带着些许的遗憾，我踏上了南去的火车，去上我的大学！虽然一路上太多的坎坷，但是，我还是来到了！大学，给我的第一印象就是&#8220;大&#8221;，人&#8220;多&#8221;！一开始来大学自己对大学有些失望的，电视里的&#8220;教授学者&#8221;，坐在校园里到处可见的场景，我从没看到过！激情洋溢的愤青到处作演说的场面，仿佛永远定格在小说里了！这些只是表面，或许没有也没什么！但是&#8230;&#8230;在学生会带过半年之后，发现&#8220;太多的太多的事情世俗话啦！还不仅如此，更可悲的是，学校竟然那这些东西炫耀！拿着一些本来就应该有或做的事情炫耀，一些不知道事情的人，还真的自以为&#8220;奥&#8221;！不说这些了，经过一些迷茫之后，我在茫茫的大海上，还是看到了&#8220;北极星&#8221;（北极星永远指着北方）--学校acm！这让我感觉到，还是有哪么一个地方，像我想想那样，远离世俗，充满学术的氛围。我为自己能进到这么一个组织感到庆幸！周老师，应该是我的大学里的恩师了！他无私奉献的精神，让交大荣耀，让交大某些老师惭愧！我不是吹嘘，不信，你可以自己来看！</p>
            <p align=left>&nbsp;　　让我们回到现在！ 来交大一年多了，一切进行的并没有多大的异常！但有一点我觉得自己交到的朋友太少了！可能是离家太远的缘故，这里么有同学，缺少交心的朋友！心里话不知道该和谁说！我没有过那么迫切的想交朋友的心情！我常常想着，等到自己老的时候，能否想起自己大学时光怎么过的，有没有那么几个可以称得上一辈子的朋友！我想会有的！大学里面什么都要均衡，时间也是，不能把时间全都投入到自己喜欢的事情上去。以前自己太偏激了，对大学里最值得学习的一门知识疏忽了&#8220;交友&#8230;&#8230;友谊&#8221;！敞开心扉吧，朋友！人和人之间需要的是沟通！</p>
            <p align=left>　　　回首自己的过去，我是幸运的，我困惑的饿时候，总有那么几个老师或朋友，支持我，给我走下去的勇气，让我学会很多生存的法则和技能！我不孤独寂寞——反驳一些人拿这个和我开玩笑的，我只是珍惜我们之间建立的友谊！&#8220;待人要真，交友交心！&#8221;</p>
            <p align=left><br>　　说了以上，似乎是我忘记提他们了——我的父母！我的父母在我心里的位置永远是最重要的，如果明天是世界末日，你会选择和谁在一起？我的父母，that's my answer, and never changed ！ 现在回想一下，自己上学的经历，我又是幸运的，我得到了我父母的充分的信任！他们从来没督促过我的学习，不是他们不关系，而是他们相信他们的儿子！我母亲说过一句话&#8220;只要你好好的，我们喝凉水都甜！&#8221;，每次想到都心里酸酸的！我是吃豆腐长大的，我的父母用豆腐供出了两个大学生，我二舅和我！我为我的父母感到骄傲！别人说我皮肤白，我说我是我爸妈用豆腐长大的，这不是玩笑话！</p>
            <p align=left>　　　　</p>
            <p align=left>　　　　唠唠叨叨了这么多，不为别的，只是有感而发，这两天给好几个人过了生日，过一次生日就代表我们又长大一岁，就该懂点事儿！明天是我的生日，我把这个《回首》送给自己！不为别的，为的是自己能勇敢的向前看！</p>
            </td>
            <td vAlign=top width=40>
            <p align=center>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<table style="WIDTH: auto; TABLE-LAYOUT: fixed" class=i border=0 cellSpacing=0 cellPadding=0 align=center height=344>
    <tbody>
        <tr>
            <td style="BACKGROUND-POSITION: right bottom" height=48>
            <p align=center>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dragon(小志)</p>
            <p align=center><br>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
        </tr>
    </tbody>
</table>
<table style="HEIGHT: 0px; FONT-SIZE: 0px" border=0 cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td></td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.cppblog.com/Dragon521/aggbug/117817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-06-13 20:52 <a href="http://www.cppblog.com/Dragon521/archive/2010/06/13/117817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个简单的数理统计的题目</title><link>http://www.cppblog.com/Dragon521/archive/2010/06/11/117649.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Fri, 11 Jun 2010 10:53:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/06/11/117649.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/117649.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/06/11/117649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/117649.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/117649.html</trackback:ping><description><![CDATA[<table style="WIDTH: 952px; HEIGHT: 84px" border=0 cellSpacing=0 cellPadding=0 width=952 background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/top-bg.gif align=center FCK__ShowTableBorders?>
    <tbody>
        <tr>
            <td height=82 vAlign=top background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/top-l.gif width=57 noWrap></td>
            <td vAlign=top width="1%" noWrap></td>
            <td vAlign=top noWrap></td>
        </tr>
    </tbody>
</table>
<table style="WIDTH: 955px; HEIGHT: 2622px" border=0 cellSpacing=0 cellPadding=0 background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/bg.gif align=center height=2622 FCK__ShowTableBorders?>
    <tbody>
        <tr>
            <td style="WIDTH: 157px; HEIGHT: 2498px" vAlign=top></td>
            <td vAlign=top background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/bg.gif align=left>
            <div>
            <p>题目链接：</p>
            <p><span>pku_1850_Code_ <a href="http://162.105.81.212/JudgeOnline/problem?id=1850" _fcksavedurl="http://162.105.81.212/JudgeOnline/problem?id=1850">http://162.105.81.212/JudgeOnline/problem?id=1850</a> </span></p>
            <p><span>pku_1496_Word Index <a href="http://162.105.81.212/JudgeOnline/problem?id=1496" _fcksavedurl="http://162.105.81.212/JudgeOnline/problem?id=1496">http://162.105.81.212/JudgeOnline/problem?id=1496</a> </span></p>
            <p>【问题概述】：给定一个长度为N(n&lt;=10)的由小写字母组成的字符串，<br>如果该字符串左边的字符都比右边的字符的字典序大，则我们称这个字符串是合法的，<br>否则不合法：</p>
            <p>e.g: 字符串：abc&nbsp;&nbsp;&nbsp; ade&nbsp;&nbsp; 是合法的，而字符串：bac bca dae 则是不合法的。</p>
            <p>现在对合法的字符串进行如下的编码（编号）：<br>a - 1 <br>b - 2 <br>... <br>z - 26 <br>ab - 27 <br>... <br>az - 51 <br>bc - 52 <br>... <br>vwxyz - 83681 <br>... <br>我们的任务就是对于给定的字符串，如果她是合法的，则找到她的编号，否则不合法，输出0：</p>
            <p>【问题分析】：首先想到的应该是暴力，但是暴力的复杂度会达到O(10^26)，可能会超时，当然有人爆过了。<br>这里将一个更为高效的算法。先看一下这个图：<img style="WIDTH: 215px; HEIGHT: 79px" border=0 alt="" align=right src="http://www.cppblog.com/images/cppblog_com/dragon521/a.png" width=215 height=79><span align="right"><br>我们可以知道，长度为k（k&gt;=1)的字符串的编号是在长度为k-1的基础上增加而来的，为了计算的方便，我们可以先计算出长度为k-1的字符串可以编号为多少，也就知道了长度为k的第一个字符串的编号（加一就可以）。但是问题还没得到解决，下面是重点：该如何统计当前输入的长度为k的字符串的编号：她等于长度为k-1的最大编号加上当前字符串在当前长度的编号。由此如何快速统计当前字符串在当前长度的集合（把不同的长度的字符串划分为不同的集合）里编号是解决这个题目的第二个要点。</span></p>
            <p><span align="right">设s[k][i](0&lt; i&lt;= 26)表示长度等于k的合法串以字母(i+'a'-1)开头的串的数目，则规定s[k][26]表示长度为k的集合的合法串的总的个数。对于给定的长度为n的字符串，我们由右向左考虑，找第i个字符和第i-1个字符的关系：令tmp = s[ k ][ str[i] - 1] - s[k][ str[i-1] ]，表示在前i-1个字符不变时，可得到的不同的新合法字符串的个数。对于第一个字符，我们要判断她是不是第一个字母&#8216;a',不是的话，她可以得到的心合法字符串的个数为s[k][str[0]-1]. 最后的话，我们再把所有长度小于n的字符长的个数加起来就是我们要求的：下面是简单的代码，供大家讨论交流：</span></p>
            <p><span><font color=#000000 size=3 face=Calibri>#include &lt;iostream&gt;</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>#include &lt;string.h&gt;</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>using namespace<span> </span>std;</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>const int maxn = 28;</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>int s[11][maxn], n;</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>bool isValid(char *s, int &amp;n) {</font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>int i = n = 0;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>for(i = 1; s[i]; i++) </font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(s[i] &lt;= s[i-1]) return 0;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>n = i;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>return 1;</font></font></font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>}</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>void init() {</font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>s[0][27] = 1;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>for (int k = 1; k &lt; 11; k++) {</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int m = 26-k+1;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int i = 1; i &lt;= m; i++) {</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>s[k][i] += s[k][i-1] + s[k-1][m+1]-s[k-1][i]; </font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>s[0][27] = 0;</font></font></font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>}</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>void pt() {</font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>int sum = 0;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>for (int k = 1; k &lt; 11; k++) {</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int m = 26-k+1;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int i = 1; i &lt;= m; i++) {</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("s[%d][%d] = %d\n", k, i, s[k][i]); </font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sum += s[k][m];</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>printf("%d\n", sum);</font></font></font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>}</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>inline int d(char c) { return c-'a'+1;}</font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>int main() {//freopen("in.in", "r", stdin);</font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>init(); //pt(); </font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>char str[11];</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>int m, i, k;</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>while(scanf("%s", str) != EOF) {</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (!isValid(str, n)) { puts("0"); continue;}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i = n-1, k = 1, m = 1; i &gt;= 1; i--, k++)</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>m += s[k][d(str[i]-1)] - s[k][d(str[i-1])]; </font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (str[0] != 'a') m += s[k][d(str[0]-1)];</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i = 1; i &lt; k; i++) m += s[i][26-i+1];</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%d\n", m);<span>&nbsp;&nbsp;&nbsp; </span></font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>}</font></font></font></span></p>
            <p><span><font size=3><font color=#000000><font face=Calibri><span>&nbsp;&nbsp;&nbsp; </span>return 0;</font></font></font></span></p>
            <p><span><font color=#000000 size=3 face=Calibri>}</font></span></p>
            </div>
            </td>
            <td style="WIDTH: 158px" vAlign=top></td>
        </tr>
    </tbody>
</table>
<table style="WIDTH: 952px; HEIGHT: 36px" border=0 cellSpacing=0 cellPadding=0 width=952 background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/bottom-bg.gif align=center FCK__ShowTableBorders?>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td height=34 background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/62/bottom-r.gif width=123></td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/Dragon521/aggbug/117649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-06-11 18:53 <a href="http://www.cppblog.com/Dragon521/archive/2010/06/11/117649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gauss消元算法求解开关灯问题</title><link>http://www.cppblog.com/Dragon521/archive/2010/05/26/Gauss2.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Wed, 26 May 2010 09:23:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/05/26/Gauss2.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/116408.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/05/26/Gauss2.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/116408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/116408.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 8pt">&nbsp;</p>
<table border=0 cellSpacing=0 cellPadding=0 bgColor=#f7ffee align=center height=344>
    <tbody>
        <tr>
            <td style="FONT-SIZE: 8pt" vAlign=top width=40>
            <table border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
                <tbody>
                    <tr>
                        <td style="FONT-SIZE: 8pt" height=81 vAlign=top background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/0/s02.gif>&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td style="FONT-SIZE: 8pt" id=QQMAILSTATIONERY vAlign=top align=left>
            <p style="FONT-SIZE: 8pt" align=left>/*================================================================================================*\</p>
            <p style="FONT-SIZE: 8pt" align=left>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gauss消元算法求解开关灯问题&nbsp;&nbsp;&nbsp; </p>
            <p style="FONT-SIZE: 8pt" align=left>\*================================================================================================*/</p>
            <div style="FONT-SIZE: 8pt">
            <p style="FONT-SIZE: 8pt" align=left>开关问题：有N个相同的开关，每个开关都与某些开关有着联系，每当你打开或者关闭某个开关的时候，其他的与<br>此开关相关联的开关也会相应地发生变化，即这些相联系的开关的状态如果原来为开就变为关，如果为关就变为开。</p>
            <p style="FONT-SIZE: 8pt" align=left>对于这类问题，巧妙的运用位运算和gauss算法可以高效的解决。</p>
            </div>
            <p style="FONT-SIZE: 8pt" align=left>----------------------------------------------------------------------------------------</p>
            <p style="FONT-SIZE: 8pt" align=left>开灯问题告诉N(N&lt;=63)盏灯和M(M&lt;=N)个开关,每个开关可以控制K(K&lt;=N)盏灯，给定N盏灯的初始状态S和<br>要求通过开关控制得到的目标状态E，求可以达到目标状态的方案数。</p>
            <p style="FONT-SIZE: 8pt" align=left>----------------------------------------------------------------------------------------</p>
            <p style="FONT-SIZE: 8pt" align=left>简单分析：对于每个开关，有按和不按两种选择（记为0/1）; 对于每盏灯有变和不变两种情况（0/1）,如果初态和终态不一样<br>，那么这盏灯是一定要变化的。由此我们就可以得到一个0/1的矩阵：让N盏灯灯作为列向量，开关作为横向量，把每盏灯是否变化<br>作为第M列（由0开始）这样就得到一个N*(M+1)的矩阵,该矩阵有如下性质：</p>
            <p style="FONT-SIZE: 8pt" align=left>1. 如果N = M ，那么矩阵为增广矩阵。</p>
            <p style="FONT-SIZE: 8pt" align=left>2. 该矩阵相当于方程组A * X = B,因此可以求其解。</p>
            <p style="FONT-SIZE: 8pt" align=left>&nbsp;&nbsp; 1. 若方程组有唯一解，那么，N = M (逆命题：如果M = N ,那么方程组有唯一解 不成立)</p>
            <p style="FONT-SIZE: 8pt" align=left>&nbsp;&nbsp; 2. 若方程组无实数解，那么，该方程不可以化成严格上三角形式（具体的证明见相关资料，这里不再证明）</p>
            <p style="FONT-SIZE: 8pt" align=left>&nbsp;&nbsp; 3. 若方程组有多接，即存在自由变元，因为每个自由变元可以取0/1两种情况，那么总共有2^m(m为变元数)解<br>(也就是不影响最后结果的自由开关的数目）</p>
            <p style="FONT-SIZE: 8pt" align=left>下面是经过验证的代码：</p>
            <p style="FONT-SIZE: 8pt">int getRow(int p, int q, int &amp;row) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = p; i &lt; n; i++) </p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!zero(a[i][q])) return a[row=i][q];</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return row=0;</p>
            <p style="FONT-SIZE: 8pt">}</p>
            <p style="FONT-SIZE: 8pt">void swapRow(int p, int row, int q) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int k = q; k &lt;= m; k++)</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(a[p][k], a[row][k]);</p>
            <p style="FONT-SIZE: 8pt">}</p>
            <p style="FONT-SIZE: 8pt">i64 gauss() {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = -1, j = -1, k, p, q, ret, row;</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(++i &lt; n &amp;&amp; ++j &lt; m) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = getRow(i, j, row);</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (zero(ret)) { i--; continue;}</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (row != i) swapRow(i, row, j);</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (p = i+1; p &lt; n; p++) if (a[p][j])</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (q = j; q &lt;= m; q++)</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[p][q] ^= a[i][q];</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (k = i; k &lt; n; k++) if(a[k][m]) return -1;</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (i64)1 &lt;&lt; (m-i);</p>
            <p style="FONT-SIZE: 8pt">} &nbsp;&nbsp;&nbsp; //link: hdu3364 <a href="http://acm.hdu.edu.cn/showproblem.php?pid=3364">http://acm.hdu.edu.cn/showproblem.php?pid=3364</a> </p>
            <p style="FONT-SIZE: 8pt" align=left>----------------------------------------------------------------------------------------</p>
            <p style="FONT-SIZE: 8pt" align=left>开关问题：有N个相同的开关，每个开关都与某些开关有着联系，每当你打开或者关闭某个开关的时候，<br>其他的与此开关相关联的开关也会相应地发生变化，即这些相联系的开关的状态如果原来为开就变为关，<br>果为关就变为开。求： 1. 方案数（自由变元的数目）&nbsp;2. 给定一个最少的开关方案</p>
            <p style="FONT-SIZE: 8pt" align=left>----------------------------------------------------------------------------------------</p>
            <p style="FONT-SIZE: 8pt" align=left>这类问题是上面问题的一种简化：</p>
            <p style="FONT-SIZE: 8pt" align=left>对于问题一、可以直接套用上面的公式（N=M）</p>
            <p style="FONT-SIZE: 8pt" align=left>对于问题二、如果构造得到的方程组只有一个解，那么问题解决，这里主要讨论一下多解，<br>存在自由变元的情况。如果存在自由变元，我们就要枚举每个自由变元（0/1）然后比较选择最小。<br>枚举时间复杂度为2^m(m为自由变元的个数)</p>
            <p style="FONT-SIZE: 8pt" align=left>下面是简单的枚举自由元的算法。</p>
            <p style="FONT-SIZE: 8pt">int gans(int a[][maxn+1]) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i, j, ret = a[n-1][n];</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = n-2; i &gt;= 0; i--) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (j = i+1; j &lt; n; j++)</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[i][n] ^= a[i][j] &amp;&amp; a[j][n];</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret += b[i][n];</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;</p>
            <p style="FONT-SIZE: 8pt">}</p>
            <p style="FONT-SIZE: 8pt">void dfs(int p, int k) { </p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (p == k) {</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(b, a, sizeof(b));</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int ret = gans(b);</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ret &lt; ans) ans = ret;</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[p][n] = 1; dfs(p-1, k);</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[p][n] = 0; dfs(p-1, k);</p>
            <p style="FONT-SIZE: 8pt">}</p>
            <p style="FONT-SIZE: 8pt">int gauss() { //&#8230;&#8230;代码见上（n=m）&#8230;&#8230;//</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dfs(n-1, i-1);</p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ans;</p>
            <p style="FONT-SIZE: 8pt">}</p>
            <p style="FONT-SIZE: 8pt">Link: pku_1222 <a href="http://162.105.81.212/JudgeOnline/problem?id=1222">http://162.105.81.212/JudgeOnline/problem?id=1222</a> </p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pku_1681 <a href="http://162.105.81.212/JudgeOnline/problem?id=1681">http://162.105.81.212/JudgeOnline/problem?id=1681</a></p>
            <p style="FONT-SIZE: 8pt">pku_1753 <a href="http://162.105.81.212/JudgeOnline/problem?id=1753">http://162.105.81.212/JudgeOnline/problem?id=1753</a> </p>
            <p style="FONT-SIZE: 8pt">pku_1830 <a href="http://162.105.81.212/JudgeOnline/problem?id=1830">http://162.105.81.212/JudgeOnline/problem?id=1830</a> </p>
            <p style="FONT-SIZE: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pku_3185 <a href="http://162.105.81.212/JudgeOnline/problem?id=3185">http://162.105.81.212/JudgeOnline/problem?id=3185</a> <br>&nbsp;&nbsp;&nbsp;&nbsp; hdu_2285 <a href="http://acm.hdu.edu.cn/showproblem.php?pid=2285">http://acm.hdu.edu.cn/showproblem.php?pid=2285</a>&nbsp;</p>
            </td>
            <td style="FONT-SIZE: 8pt" vAlign=bottom width=40>
            <table border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
                <tbody>
                    <tr>
                        <td style="FONT-SIZE: 8pt" height=96 vAlign=top background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/0/s06.gif>&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0 width="100%" background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/0/s04.gif bgColor=#f7ffee align=center>
    <tbody>
        <tr>
            <td style="FONT-SIZE: 8pt" vAlign=bottom background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/0/s03.gif width=75>&nbsp;</td>
            <td style="FONT-SIZE: 8pt" height=119 vAlign=bottom>&nbsp;</td>
            <td style="FONT-SIZE: 8pt" vAlign=bottom background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/0/s05.gif width=217>&nbsp;</td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td style="FONT-SIZE: 8pt"></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/Dragon521/aggbug/116408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-05-26 17:23 <a href="http://www.cppblog.com/Dragon521/archive/2010/05/26/Gauss2.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku_1753_Flip Game--Gauss+Dfs</title><link>http://www.cppblog.com/Dragon521/archive/2010/05/24/Gauss.html</link><dc:creator>小志</dc:creator><author>小志</author><pubDate>Mon, 24 May 2010 15:55:00 GMT</pubDate><guid>http://www.cppblog.com/Dragon521/archive/2010/05/24/Gauss.html</guid><wfw:comment>http://www.cppblog.com/Dragon521/comments/116262.html</wfw:comment><comments>http://www.cppblog.com/Dragon521/archive/2010/05/24/Gauss.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Dragon521/comments/commentRss/116262.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dragon521/services/trackbacks/116262.html</trackback:ping><description><![CDATA[<font color=#008000><font face=新宋体>
<table border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#f2ebdd align=center>
    <tbody>
        <tr>
            <td height=89 vAlign=top background=http://rescdn.qqmail.com/zh_CN/images/stationery/love/34/top-l.jpg width=400 noWrap></td>
            <td vAlign=top width="1%" noWrap>&nbsp;</td>
            <td vAlign=top noWrap>&nbsp;</td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0 bgColor=#f2ebdd align=center height=344>
    <tbody>
        <tr>
            <td vAlign=top width=40></td>
            <td id=QQMAILSTATIONERY vAlign=top align=left>
            <div><sign signid="0">&nbsp;</div>
            </sign>
            <div><qzone signid=""></qzone></div>
            <div>
            <p align=left><span>//Name: pku_1753_Flip Game</span></p>
            <p align=left><span>//Author: longxiaozhi</span></p>
            <p align=left><span><font color=#000000>http:</font><span>//hi.baidu.com/xiehuixb/blog/item/9ce25f10ee8a2e77ca80c4d1.</span></span></p>
            <p align=left><span>//Root: </span><span>和前面的<span>pku1681</span>一个意思<span>,</span>但是，测试数据加强了！这个题目需要考虑自由元！！也就是我以前的<span>gauss</span>的所在，</span></p>
            <p align=left><span>//</span><span>这个问题一直困扰了我两天天。以前的题目的测试数据好像并没有考虑这一点，所以可以水果去，但是这个题目就不行啦。</span></p>
            <p align=left><span>//</span><span>但是，还是可以用<span>gauss</span>的算法解决的。如果不存在自由变元，那么说明原方程组只有一组解，也就是我们要求的；</span></p>
            <p align=left><span>//</span><span>如果存在自由变元，则说明我们求道的方程的解只是其中的一种情况，但不一定是最优的。</span></p>
            <p align=left><span>//</span><span>一次我们还要考虑自由变元因为我们求出来的知识满足条件的一种解，并不是这里要求的最优解。</span></p>
            <p align=left><span>//</span><span>我们要考虑自由变元的取值：</span></p>
            <p align=left><span>//</span><span>每个自由元我们都枚举她的值（或）让后进行一次深搜就可以把自由元的情况加进去，正如<span>xiehui</span>博客里写的一样。</span></p>
            <p align=left><span>#include</span><span><font color=#000000> </font><span>&lt;iostream&gt;</span></span></p>
            <p align=left><span>#include</span><span><font color=#000000> </font><span>&lt;string.h&gt;</span></span></p>
            <p align=left><span>using</span><span><font color=#000000> </font><span>namespace</span><font color=#000000> std;</font></span></p>
            <p align=left><span>#define</span><span><font color=#000000> eps 1e-10</font></span></p>
            <p align=left><span>#define</span><span><font color=#000000> fabs(x) ((x)&gt;0?(x):-(x))</font></span></p>
            <p align=left><span>#define</span><span><font color=#000000> zero(x) (fabs(x) &lt; eps)</font></span></p>
            <p align=left><span>const</span><span><font color=#000000> </font><span>int</span><font color=#000000> maxn = 16;</font></span></p>
            <p align=left><span>int</span><span><font color=#000000> a[maxn][maxn+1], b[maxn][maxn+1];</font></span></p>
            <p align=left><span>int</span><span><font color=#000000> n, m, ans;</font></span></p>
            <p align=left><span>const</span><span><font color=#000000> </font><span>int</span><font color=#000000> dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};</font></span></p>
            <p align=left><span>inline</span><span><font color=#000000> </font><span>int</span><font color=#000000> isBound(</font><span>int</span><font color=#000000> a, </font><span>int</span><font color=#000000> b) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>return</span><font color=#000000> a &lt; 0 || a &gt;= m || b &lt; 0 || b &gt;= m;</font></span></p>
            <p align=left><span><font color=#000000>}</font></span></p>
            <p align=left><span>void</span><span><font color=#000000> pmat(</font><span>int</span><font color=#000000> a[][maxn+1]) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (</font><span>int</span><font color=#000000> i = 0, j; i &lt; n; i++) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (j = 0; j &lt; n; j++)</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf(</font><span>"%d "</span><font color=#000000>, a[i][j]);</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf(</font><span>"%d\n"</span><font color=#000000>, a[i][j]);</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000>}</font></span></p>
            <p align=left><span>void</span><span><font color=#000000> pans(</font><span>int</span><font color=#000000> a[][maxn+1]) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (</font><span>int</span><font color=#000000> i = 0; i &lt; n; i++)</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf((i+1)%m ? </font><span>"%d "</span><font color=#000000>:</font><span>"%d\n"</span><font color=#000000>, a[i][n]);</font></span></p>
            <p align=left><span><font color=#000000>}</font></span></p>
            <p align=left><span>int</span><span><font color=#000000> gans(</font><span>int</span><font color=#000000> a[][maxn+1]) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>int</span><font color=#000000> i, j, ret = a[n-1][n];</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (i = n-2; i &gt;= 0; i--) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (j = i+1; j &lt; n; j++)</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i][n] ^= a[i][j] &amp;&amp; a[j][n];</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ret += b[i][n];</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>return</span><font color=#000000> ret;</font></span></p>
            <p align=left><span><font color=#000000>}</font></span></p>
            <p align=left><span>void</span><span><font color=#000000> dfs(</font><span>int</span><font color=#000000> p, </font><span>int</span><font color=#000000> k) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>if</span><font color=#000000> (p == k) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memcpy(b, a, </font><span>sizeof</span><font color=#000000>(b));</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>int</span><font color=#000000> ret = gans(b);</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>if</span><font color=#000000> (ret &lt; ans) ans = ret;</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>return</span><font color=#000000>;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>a[p][n] = 1; dfs(p-1, k);</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>a[p][n] = 0; dfs(p-1, k);</font></span></p>
            <p align=left><span><font color=#000000>}</font></span></p>
            <p align=left><span>&nbsp; </p>
            <p><span>int getRow(int p, int q, int &amp;row) {</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int i = p; i &lt; n; i++) </span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (!zero(a[i][q])) return a[row=i][q];</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return row = 0;</span></p>
            <p><span>}</span></p>
            <p><span>void swapRow(int i, int row, int q) {</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int k = q; k &lt;= n; k++)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>swap(a[i][k], a[row][k]);</span></p>
            <p><span>}</span></p>
            <p><span>int gauss() {</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i = 0, j = -1, k, p, q, ret, row;</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(i &lt; n &amp;&amp; ++j &lt; n) { </span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ret = getRow(i, j, row);</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (zero(ret)) continue;</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (row != i) swapRow(i, row, j);</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (p = i + 1; p &lt; n; p++) if (a[p][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; </span>for (q = j; q &lt;= n; q++)</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; </span>a[p][q] ^= a[i][q];</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>++i;</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}pmat(a);</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (k = i; k &lt; n; k++) if (a[k][n]) return -1;</span></span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dfs(n-1, i-1);<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ans;</span></p>
            <p><span>}</span></p>
            </span>
            <p align=left><span>int</span><span><font color=#000000> main() {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>//freopen("in.in", "r", stdin);</span></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>int</span><font color=#000000> i, j, k, x, y, p, q; </font><span>char</span><font color=#000000> s[5][5];</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>n = 16; m = 4;</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (i = 0; i &lt; m; i++) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf(</font><span>"%s"</span><font color=#000000>, s[i]);</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (j = 0; j &lt; m; j++) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][n] = s[i][j] == </font><span>'b'</span><font color=#000000>;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][i*m+j] = 1;</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (k = 0; k &lt; 4; k++) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x = i + dir[k][0];</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>y = j + dir[k][1];</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>if</span><font color=#000000> (isBound(x, y)) </font><span>continue</span><font color=#000000>;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][x*m+y] = 1;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>ans = 1 &lt;&lt; 20;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>p = gauss();<span>&nbsp;&nbsp; </span></font><span>// printf("p = %d\n", p);</span></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(a, 0, </font><span>sizeof</span><font color=#000000>(a));</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (i = 0; i &lt; m; i++) {</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (j = 0; j &lt; m; j++) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][n] = s[i][j] == </font><span>'w'</span><font color=#000000>;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][i*m+j] = 1;</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>for</span><font color=#000000> (k = 0; k &lt; 4; k++) {</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x = i + dir[k][0];</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>y = j + dir[k][1];</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>if</span><font color=#000000> (isBound(x, y)) </font><span>continue</span><font color=#000000>;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[i*m+j][x*m+y] = 1;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>ans = 1 &lt;&lt; 20;</font></span></p>
            <p align=left><span><font color=#000000><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>q = gauss();<span>&nbsp;&nbsp; </span></font><span>// printf("q = %d\n", q);</span></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>if</span><font color=#000000> (p == -1 &amp;&amp; q == -1) puts(</font><span>"Impossible"</span><font color=#000000>);</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>else</span><font color=#000000> </font><span>if</span><font color=#000000> (p == -1) printf(</font><span>"%d\n"</span><font color=#000000>, q);ac</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>else</span><font color=#000000> </font><span>if</span><font color=#000000> (q == -1) printf(</font><span>"%d\n"</span><font color=#000000>, p);</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>else</span><font color=#000000> printf(</font><span>"%d\n"</span><font color=#000000>, p &lt;= q ? p:q);</font></span></p>
            <p align=left><span><span><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span>return</span><font color=#000000> 0;</font></span></p>
            <p><span><font color=#000000>}</font></span></p>
            </div>
            </td>
            <td vAlign=top width=40>&nbsp;</td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#f2ebdd align=center>
    <tbody>
        <tr>
            <td height=70></td>
        </tr>
    </tbody>
</table>
<table border=0 cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td></td>
        </tr>
    </tbody>
</table>
</font></font>
<img src ="http://www.cppblog.com/Dragon521/aggbug/116262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dragon521/" target="_blank">小志</a> 2010-05-24 23:55 <a href="http://www.cppblog.com/Dragon521/archive/2010/05/24/Gauss.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>