﻿<?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++博客-ACM-Boy-随笔分类-ACM题目</title><link>http://www.cppblog.com/ACM-Boy/category/5700.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 16 Aug 2008 13:31:49 GMT</lastBuildDate><pubDate>Sat, 16 Aug 2008 13:31:49 GMT</pubDate><ttl>60</ttl><item><title>PKU 1733 Parity game</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/08/15/58919.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 15 Aug 2008 03:23:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/08/15/58919.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/58919.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/08/15/58919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/58919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/58919.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 这几天做了些并查集的题目，其中有一些简单题就是直接套模板，没什么可以思考的。但今天做的两道题就稍微有些难度了，只有真正理解了&#8220;并&#8221;和&#8220;查&#8221;的过程才有解题的思路。<br><br>思路：<br>&nbsp;&nbsp;&nbsp; 告诉你[a,b]之间1个数的奇偶情况，那么你就可以在a-1和b之间连一条边，权值就是其奇偶情况。这样一来，比如[1,2]和[3,4]的情况已知，[1,4]的情况也就知道了。当题目给出[a,b]的情况时，首先分别从a和b往上找，找到他们的根r1和r2，如果r1 !=&nbsp; r2，表示a,b之间的奇偶情况还不确定，就将r1和r2之间连起来，根据a到r1的权值、b到r2的权值和题目所给的奇偶情况，设置r1和r2之间的权值，以符合题目要求。若r1 == r2，则表示[a,b]之间情况已确定，根据a到r1的权值和b到r2的权值，就可以判断题目所给的[a,b]的情况是否为真。<br>&nbsp;&nbsp;&nbsp; 其实当时做的时候，还不是很懂，但没想到稀里糊涂的就AC了。推荐一下这个网页：http://hi.baidu.com/fandywang_jlu/blog/item/b49e40893ddbb0b00f244485.html，这里面介绍并查集挺详细的，还有不少推荐题目，有些还不会做。：P<br><br>代码：<br><br>#include &lt;iostream&gt;<br>#include &lt;map&gt;<br>using namespace std;<br><br>const int MAX = 10005;<br><br>int n, p;<br>int pre[MAX];<br>int parity[MAX];&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //i到目前集合的根的奇偶情况<br>map&lt;int, int&gt; numIndex;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //用于离散化<br><br>int Find (int x)<br>{<br>&nbsp;&nbsp;&nbsp; if ( pre[x] == -1 )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return x;<br>&nbsp;&nbsp;&nbsp; int f;<br>&nbsp;&nbsp;&nbsp; f = Find(pre[x]);<br>&nbsp;&nbsp;&nbsp; parity[x] = (parity[x] + parity[pre[x]]) % 2;&nbsp;&nbsp;&nbsp; //此时pre[x]已指向最终的集合的根<br>&nbsp;&nbsp;&nbsp; pre[x] = f;<br>&nbsp;&nbsp;&nbsp; return f;<br>}<br><br>bool Query (int x, int y, int odd)<br>{<br>&nbsp;&nbsp;&nbsp; int r1, r2;<br>&nbsp;&nbsp;&nbsp; r1 = Find(x);<br>&nbsp;&nbsp;&nbsp; r2 = Find(y);<br>&nbsp;&nbsp;&nbsp; if ( r1 == r2 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( (parity[x] + parity[y]) % 2 == odd )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //只是将r1接到r2下面，这边还可以优化<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pre[r1] = r2;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parity[r1] = (parity[x] + parity[y] + odd) % 2;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>void Solve ()<br>{<br>&nbsp;&nbsp;&nbsp; int i, x, y, index, idx1, idx2, odd;<br>&nbsp;&nbsp;&nbsp; char s[10];<br>&nbsp;&nbsp;&nbsp; scanf("%d%d", &amp;n, &amp;p);<br>&nbsp;&nbsp;&nbsp; index = 0;<br>&nbsp;&nbsp;&nbsp; for (i=0; i&lt;p; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%d%d%s", &amp;x, &amp;y, &amp;s);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x --;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( numIndex.find(x) == numIndex.end() )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numIndex[x] = index ++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; idx1 = numIndex[x];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( numIndex.find(y) == numIndex.end() )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numIndex[y] = index ++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; idx2 = numIndex[y];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( strcmp(s, "odd") == 0 )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; odd = 1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; odd = 0;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( Query(idx1, idx2, odd) == false )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; printf("%d\n", i);<br>}<br><br>void Init ()<br>{<br>&nbsp;&nbsp;&nbsp; memset(pre, -1, sizeof(pre));<br>}<br><br>int main ()<br>{<br>&nbsp;&nbsp;&nbsp; Init();<br>&nbsp;&nbsp;&nbsp; Solve();<br><br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><img src ="http://www.cppblog.com/ACM-Boy/aggbug/58919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-08-15 11:23 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/08/15/58919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1639 Picnic Planning</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/07/30/57547.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Wed, 30 Jul 2008 11:10:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/07/30/57547.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/57547.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/07/30/57547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/57547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/57547.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal07.8 磅02falsefalsefalseEN-USZH-CNX-NONEMicrosoftInternetExplorer4...&nbsp;&nbsp;<a href='http://www.cppblog.com/ACM-Boy/archive/2008/07/30/57547.html'>阅读全文</a><img src ="http://www.cppblog.com/ACM-Boy/aggbug/57547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-07-30 19:10 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/07/30/57547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1037 A decorative fence</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/05/20/50507.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Tue, 20 May 2008 04:45:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/05/20/50507.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/50507.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/05/20/50507.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/50507.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/50507.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解题报告题目来源：PKU 1037 A decorative fence分类：DP原文：A decorative fence&nbsp;                                    Time Limit: 1000MS                                          ...&nbsp;&nbsp;<a href='http://www.cppblog.com/ACM-Boy/archive/2008/05/20/50507.html'>阅读全文</a><img src ="http://www.cppblog.com/ACM-Boy/aggbug/50507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-05-20 12:45 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/05/20/50507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 2201 Cartesian Tree</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48158.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 25 Apr 2008 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48158.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/48158.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/48158.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/48158.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 题目来源：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PKU2201 Cartesian Tree分类：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48158.html'>阅读全文</a><img src ="http://www.cppblog.com/ACM-Boy/aggbug/48158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-04-25 21:27 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1018 Communication System</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48157.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 25 Apr 2008 13:25:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48157.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/48157.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/48157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/48157.html</trackback:ping><description><![CDATA[<span lang="EN-US"><o:p> </o:p></span><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">题目来源：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong>
<p class="MsoNormal" style="text-indent: 36pt;">PKU 1018 Communication System</p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">算法分类：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 36pt;"><span style="font-family: 宋体;" lang="ZH-CN">枚举</span>+<span style="font-family: 宋体;" lang="ZH-CN">贪心</span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">原文：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: blue;">Communication System</span><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Time
Limit:1000MS&nbsp; Memory Limit:10000K</span><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Description</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">We have received an order from
Pizoor Communications Inc. for a special communication system. The system
consists of several devices. For each device, we are free to choose from
several manufacturers. Same devices from two manufacturers differ in their
maximum bandwidths and prices. <br>
By overall bandwidth (B) we mean the minimum of the bandwidths of the chosen
devices in the communication system and the total price (P) is the sum of the
prices of all chosen devices. Our goal is to choose a manufacturer for each
device to maximize B/P. <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Input</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">The first line of the input file
contains a single integer t (1 &#8804; t &#8804; 10), the number of test cases, followed by
the input data for each test case. Each test case starts with a line containing
a single integer n (1 &#8804; n &#8804; 100), the number of devices in the communication
system, followed by n lines in the following format: the i-th line (1 &#8804; i &#8804; n)
starts with mi (1 &#8804; mi &#8804; 100), the number of manufacturers for the i-th device,
followed by mi pairs of positive integers in the same line, each indicating the
bandwidth and the price of the device respectively, corresponding to a
manufacturer.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Output</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Your program should produce a single
line for each test case containing a single number which is the maximum
possible B/P for the test case. Round the numbers in the output to 3 digits
after decimal point. <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Sample Input</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">1
3<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">3
100 25 150 35 80 25<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">2
120 80 155 40<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">2
100 100 120 110</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Sample Output</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">0.649</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 18pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: #333399;">Source</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Tehran 2002, First Iran Nationwide
Internet Programming Contest<o:p></o:p></span></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">中文描述：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">你需要购买</span><span lang="EN-US">n</span><span style="font-family: 宋体;" lang="ZH-CN">种设备来组一个通信系统，每一种设备，又是由一些不同的制造商生产的，不同制造商生产的同种设备会有不同的带宽和价格。现在你要在每一个设备的制造商中选一个，使得购买的</span><span lang="EN-US">n</span><span style="font-family: 宋体;" lang="ZH-CN">种设备，它们带宽的最小值与价格之和的比最大。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">题目分析：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">一开始想到的就是暴搜，但是搜索的深度达到</span><span lang="EN-US">100</span><span style="font-family: 宋体;" lang="ZH-CN">，时间肯定是不允许的。想要解决这题，必须找到一个好的查找策略。再想想看这题的特点，最后的答案，带宽是选取所有设备中的最小值，而价格是选取所有设备的价格总和。如果某个制造商生产的某种设备，它的带宽较高而价格较低，那么选取它的可能性就比较大。再进一步说，如果所选取的</span><span lang="EN-US">n</span><span style="font-family: 宋体;" lang="ZH-CN">种设备的带宽的最小值</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">已经确定，那么对于某种设备，我们就可以在那些生产这种设备的，带宽大于等于</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">的制造商中进行选择。当然是选那个价格最低的设备，因为答案的分子已经确定为</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">，所以分母越小越好。看来只要枚举</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">，再对于每个设备贪心的选择最小价格就可以了，时间复杂度为</span><span lang="EN-US">O</span><span style="font-family: 宋体;" lang="ZH-CN">（</span><span lang="EN-US">mnB</span><span style="font-family: 宋体;" lang="ZH-CN">），</span><span lang="EN-US">B</span><span style="font-family: 宋体;" lang="ZH-CN">为带宽枚举的数量。但问题又来了，应该怎么枚举带宽，题目中并未给出带宽的取值范围，如果从</span><span lang="EN-US">0..maxB</span><span style="font-family: 宋体;" lang="ZH-CN">一个一个枚举的话，既费时又会造成过多重复情况（如果枚举那些在输入中出现的两个连续带宽之间的值，最后的答案是一样的）。所以我们应该采取某个方法记录输入中出现过的带宽（</span><span lang="EN-US">STL</span><span style="font-family: 宋体;" lang="ZH-CN">中的</span><span lang="EN-US">set</span><span style="font-family: 宋体;" lang="ZH-CN">是个不错的选择），再枚举这些带宽。在枚举中，可能出现这种情况：枚举</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">，选择了</span><span lang="EN-US">n</span><span style="font-family: 宋体;" lang="ZH-CN">种设备，但选择的所有设备的带宽都大于</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">，那么最终用</span><span lang="EN-US">b/price</span><span style="font-family: 宋体;" lang="ZH-CN">就不是这种情况的正确答案。其实不用担心，因为正确答案一定大于</span><span lang="EN-US">b/price</span><span style="font-family: 宋体;" lang="ZH-CN">。假设上面这种情况的实际带宽最小值是</span><span lang="EN-US">b&#8217;</span><span style="font-family: 宋体;" lang="ZH-CN">，那个当我们再去枚举</span><span lang="EN-US">b&#8217;</span><span style="font-family: 宋体;" lang="ZH-CN">时，至少有一个设备的带宽等于</span><span lang="EN-US">b&#8217;</span><span style="font-family: 宋体;" lang="ZH-CN">，这次得到的答案也就是上面那种情况的答案，所以最终还是能得到正确解。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">代码：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;iostream&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;map&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;set&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;climits&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">using
namespace std;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">const int
MAX = 105;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">struct Info<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int band, price;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">struct
Device<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int manuNum;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Info info[MAX];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>map&lt;int, int&gt; minPrice;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//map[i] = j </span><span style="font-family: 宋体;" lang="ZH-CN">表示带宽</span><span lang="EN-US">&gt;=i</span><span style="font-family: 宋体;" lang="ZH-CN">的最小价格是</span><span lang="EN-US">j<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int minBand, maxBand;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Device
device[MAX];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int
deviceNum;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">set&lt;int&gt;
band;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">输入中出现过的</span><span lang="EN-US">band<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">set&lt;int&gt;::iterator
start, end;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int
maxBand, minBand;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">需要枚举的</span><span lang="EN-US">band</span><span style="font-family: 宋体;" lang="ZH-CN">的最值</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int cmp(
const void *a , const void *b ) <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{ <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Info *c = (Info *)a; <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Info *d = (Info *)b; <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(c-&gt;band != d-&gt;band)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return
d-&gt;band - c-&gt;band; <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return
c-&gt;price - d-&gt;price; <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">} <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Input
()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i, j, max, min;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>band.clear();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;deviceNum;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=0; i&lt;deviceNum; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].minBand
= INT_MAX;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].maxBand
= -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;device[i].manuNum;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j=0;
j&lt;device[i].manuNum; j++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;device[i].info[j].band&gt;&gt;device[i].info[j].price;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>band.insert(device[i].info[j].band);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if
( device[i].info[j].band &gt; device[i].maxBand )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].maxBand
= device[i].info[j].band;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if
( device[i].info[j].band &lt; device[i].minBand )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].minBand
= device[i].info[j].band;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Pre ()<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">预处理</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i, j, min, b;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">计算所需枚举的带宽的最值</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>maxBand = INT_MAX;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//maxBand</span><span style="font-family: 宋体;" lang="ZH-CN">为所有设备带宽最大值的最小值</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>minBand = INT_MAX;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//minBand</span><span style="font-family: 宋体;" lang="ZH-CN">为所有设备带宽最小值的最小值</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=0; i&lt;deviceNum; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (
device[i].maxBand &lt; maxBand )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>maxBand
= device[i].maxBand;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (
device[i].minBand &lt; minBand )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>minBand
= device[i].minBand;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">对于每个设备，找到带宽大于等于某一值的最小价格</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=0; i&lt;deviceNum; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//band</span><span style="font-family: 宋体;" lang="ZH-CN">从大到小，</span><span lang="EN-US">band</span><span style="font-family: 宋体;" lang="ZH-CN">相等时</span><span lang="EN-US">price</span><span style="font-family: 宋体;" lang="ZH-CN">从小到大</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>qsort(device[i].info,
device[i].manuNum, sizeof(Info), cmp);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].minPrice.clear();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min =
device[i].info[0].price;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b =
device[i].info[0].band;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].minPrice[b]
= min;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (j=1;
j&lt;device[i].manuNum; j++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if
( device[i].info[j].band == b )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>continue;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if
( device[i].info[j].price &lt; min )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>min
= device[i].info[j].price;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b
= device[i].info[j].band;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>device[i].minPrice[b]
= min;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Solve
()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Pre();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int b, i, totalPrice;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>double rate, ans;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>map&lt;int, int&gt;::iterator
it;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>start = band.find(minBand);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>end = band.find(maxBand);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>end ++;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while ( start != end )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>b = *start;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>start ++;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>totalPrice = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=0;
i&lt;deviceNum; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">找到带宽大于等于</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">的最小价格</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for
(it=device[i].minPrice.begin(); it!=device[i].minPrice.end(); it++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if
( it-&gt;first &gt;= b )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>totalPrice
+= it-&gt;second;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>break;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rate = double(b)
/ totalPrice;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( rate &gt;
ans )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans
= rate;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%.3f\n", ans);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int main ()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int test;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;test;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while ( test -- )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Input ();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Solve ();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p><img src ="http://www.cppblog.com/ACM-Boy/aggbug/48157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-04-25 21:25 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/04/25/48157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 3513 Let's Go to the Movies</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/03/25/45395.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Tue, 25 Mar 2008 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/03/25/45395.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/45395.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/03/25/45395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/45395.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/45395.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解题报告&nbsp;题目来源：PKU 3513 Let's Go to the Movies&nbsp;分类：树形DP&nbsp;原文：Let's Go to the Movies&nbsp;                                    Time Limit: 1000MS              ...&nbsp;&nbsp;<a href='http://www.cppblog.com/ACM-Boy/archive/2008/03/25/45395.html'>阅读全文</a><img src ="http://www.cppblog.com/ACM-Boy/aggbug/45395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-03-25 23:16 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/03/25/45395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 1505 Copying Books</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/03/10/44085.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Mon, 10 Mar 2008 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/03/10/44085.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/44085.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/03/10/44085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/44085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/44085.html</trackback:ping><description><![CDATA[<p class="MsoTitle"><span style="font-size: 18pt; line-height: 115%; font-family: 宋体-方正超大字符集;" lang="ZH-CN">解题报告</span><span style="font-size: 18pt; line-height: 115%; font-family: 宋体-方正超大字符集;"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: center;" align="center"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">题目来源：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 36pt;">PKU 1505 Copying Books</p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">算法分类：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 36pt;">DP</p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">原文：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center; line-height: normal;" align="center"><span style="font-size: 12pt; font-family: &quot;times new roman&quot;,&quot;serif&quot;;" lang="EN-US">Copying Books<o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" border="0" cellpadding="0">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Time Limit:</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> 3000MS<o:p></o:p></span></p>
            </td>
            <td style="padding: 0.75pt; width: 7.5pt;" width="10"><br></td>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Memory Limit:</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> 10000K<o:p></o:p></span></p>
            </td>
        </tr>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Total Submissions:</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> 1806<o:p></o:p></span></p>
            </td>
            <td style="padding: 0.75pt; width: 7.5pt;" width="10"><br></td>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Accepted:</span></strong><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> 404<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Description<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;times new roman&quot;,&quot;serif&quot;;" lang="EN-US">Before the
invention of book-printing, it was very hard to make a copy of a book. All the
contents had to be re-written by hand by so called scribers. The scriber had
been given a book and after several months he finished its copy. One of the
most famous scribers lived in the 15th century and his name was Xaverius
Endricus Remius Ontius Xendrianus (Xerox). Anyway, the work was very annoying
and boring. And the only way to speed it up was to hire more scribers. <br>
<br>
Once upon a time, there was a theater ensemble that wanted to play famous
Antique Tragedies. The scripts of these plays were divided into many books and
actors needed more copies of them, of course. So they hired many scribers to
make copies of these books. Imagine you have m books (numbered 1, 2 ... m) that
may have different number of pages (p1, p2 ... pm) and you want to make one
copy of each of them. Your task is to divide these books among k scribes, k
&lt;= m. Each book can be assigned to a single scriber only, and every scriber
must get a continuous sequence of books. That means, there exists an increasing
succession of numbers 0 = b0 &lt; b1 &lt; b2, ... &lt; b<sub>k-1</sub> &lt;= bk
= m such that i-th scriber gets a sequence of books with numbers between bi-1+1
and bi. The time needed to make a copy of all the books is determined by the
scriber who was assigned the most work. Therefore, our goal is to minimize the
maximum number of pages assigned to a single scriber. Your task is to find the
optimal assignment. <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Input<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;times new roman&quot;,&quot;serif&quot;;" lang="EN-US">The input
consists of N cases. The first line of the input contains only positive integer
N. Then follow the cases. Each case consists of exactly two lines. At the first
line, there are two integers m and k, 1 &lt;= k &lt;= m &lt;= 500. At the
second line, there are integers p1, p2, ... pm separated by spaces. All these
values are positive and less than 10000000. <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Output<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;times new roman&quot;,&quot;serif&quot;;" lang="EN-US">For each
case, print exactly one line. The line must contain the input succession p1,
p2, ... pm divided into exactly k parts such that the maximum sum of a single
part should be as small as possible. Use the slash character ('/') to separate
the parts. There must be exactly one space character between any two successive
numbers and between the number and the slash. <br>
<br>
If there is more than one solution, print the one that minimizes the work
assigned to the first scriber, then to the second scriber etc. But each scriber
must be assigned at least one book. <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Sample Input<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">2<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">9
3<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">100
200 300 400 500 600 700 800 900<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">5
4<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">100
100 100 100 100<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Sample Output<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">100
200 300 400 500 / 600 700 / 800 900<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">100
/ 100 / 100 / 100 100<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;">Source<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;times new roman&quot;,&quot;serif&quot;;" lang="EN-US"><a href="http://acm.pku.edu.cn/JudgeOnline/searchproblem?field=source&amp;key=Central+Europe+1998"><span style="color: blue;">Central Europe 1998</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">中文描述：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">题目大意是给你</span><span lang="EN-US">m</span><span style="font-family: 宋体;" lang="ZH-CN">（</span><span lang="EN-US">1&#8230;m</span><span style="font-family: 宋体;" lang="ZH-CN">）本书，每本书有</span><span lang="EN-US">Pm</span><span style="font-family: 宋体;" lang="ZH-CN">页，用</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">（</span><span lang="EN-US">k&lt;=m</span><span style="font-family: 宋体;" lang="ZH-CN">）个员工来复印这些书。每本书只能分配给一个员工来复印，并且每个员工必须复印一段连续的书籍，每个员工复印的时间取决于所复印书籍的总页数。让你给出相应的分配，使得分配给员工的书籍页数的最大值尽量小。注意，如果有多种分配的方案，使得第一个员工的书籍页数尽量少，其次是第二个、第三个&#8230;&#8230;以此类推。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">题目分析：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">我们可以从后往前推，最后一个员工，也就是第</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">个员工，他至少要复印第</span><span lang="EN-US">m</span><span style="font-family: 宋体;" lang="ZH-CN">本书，至多可以复印第</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">本到第</span><span lang="EN-US">m</span><span style="font-family: 宋体;" lang="ZH-CN">本（因为至少要分配给前</span><span lang="EN-US">k-1</span><span style="font-family: 宋体;" lang="ZH-CN">个员工每人一本书）。假设，第</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">名员工复制第</span><span lang="EN-US">i</span><span style="font-family: 宋体;" lang="ZH-CN">（</span><span lang="EN-US">k&lt;=i&lt;=m</span><span style="font-family: 宋体;" lang="ZH-CN">）本书到第</span><span lang="EN-US">m</span><span style="font-family: 宋体;" lang="ZH-CN">本书，那么，所有员工复印书籍的最小时间就为第</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">名员工所需的时间以及前</span><span lang="EN-US">k-1</span><span style="font-family: 宋体;" lang="ZH-CN">名员工复制前</span><span lang="EN-US">i-1</span><span style="font-family: 宋体;" lang="ZH-CN">本书所需最小时间的较大的那个时间。这样，问题的规模就从</span><span lang="EN-US">k</span><span style="font-family: 宋体;" lang="ZH-CN">个员工复印</span><span lang="EN-US">m</span><span style="font-family: 宋体;" lang="ZH-CN">本书减小到了</span><span lang="EN-US">k-1</span><span style="font-family: 宋体;" lang="ZH-CN">个员工复印</span><span lang="EN-US">i-1</span><span style="font-family: 宋体;" lang="ZH-CN">本书，而且求解过程中会不断遇到前</span><span lang="EN-US">a</span><span style="font-family: 宋体;" lang="ZH-CN">个员工复印前</span><span lang="EN-US">b</span><span style="font-family: 宋体;" lang="ZH-CN">本书的最小时间。为了减小问题的规模以及记录重复子问题的解，就可以用</span><span lang="EN-US">DP</span><span style="font-family: 宋体;" lang="ZH-CN">。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">但仅仅算出最小时间的不够的，还要给出分配的方案，这个稍微有点繁琐。因为题目中说，如果有多种最优的分配方案，应该让前面的员工分配的页数尽量少。那么，可以从后推，在当前的员工所复印的书籍页数没有超过最大页数的情况下，让其复印的页数最大化。如果超过了最大页数，就把这本书分配给前一名员工。最后再按顺序将分配结果输出出来。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">代码：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;cstdio&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;climits&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#include
&lt;cstring&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">const int
MAX = 505;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int
book[MAX];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64
total[MAX];<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>//1~n</span><span style="font-family: 宋体;" lang="ZH-CN">本书的页数</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int k, m;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64
f[MAX][MAX];<span>&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//f[i][j] = k </span><span style="font-family: 宋体;" lang="ZH-CN">表示前</span><span lang="EN-US">i</span><span style="font-family: 宋体;" lang="ZH-CN">个人复制前</span><span lang="EN-US">j</span><span style="font-family: 宋体;" lang="ZH-CN">本书所需最少时间是</span><span lang="EN-US">k<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64
max;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Input
()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d%d", &amp;m,
&amp;k);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=1; i&lt;=m; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",
&amp;book[i]);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64 Sum
(int s, int e)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">第</span><span lang="EN-US">s</span><span style="font-family: 宋体;" lang="ZH-CN">本书到第</span><span lang="EN-US">e</span><span style="font-family: 宋体;" lang="ZH-CN">本书的总页数</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return (total[e] - total[s-1]);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64 Max
(__int64 a, __int64 b)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return ( a&gt;b?a:b );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">__int64 Min
(int x, int y)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">前</span><span lang="EN-US">x</span><span style="font-family: 宋体;" lang="ZH-CN">个人复制前</span><span lang="EN-US">y</span><span style="font-family: 宋体;" lang="ZH-CN">本书所需的最少时间</span><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x&lt;=y<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 36pt;"><span lang="EN-US">//</span><span style="font-family: 宋体;" lang="ZH-CN">考虑特殊情况</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( f[x][y] != -1 )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return f[x][y];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( y == 0 )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return ( f[x][y]
= 0 );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( x == 0 )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return ( f[x][y]
= INT_MAX );<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 temp;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[x][y] = INT_MAX;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=x-1; i&lt;y; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 36pt;"><span lang="EN-US">//</span><span style="font-family: 宋体;" lang="ZH-CN">第</span><span lang="EN-US">x</span><span style="font-family: 宋体;" lang="ZH-CN">个人复制第</span><span lang="EN-US">i+1</span><span style="font-family: 宋体;" lang="ZH-CN">到第</span><span lang="EN-US">y</span><span style="font-family: 宋体;" lang="ZH-CN">本书与前</span><span lang="EN-US">x-1</span><span style="font-family: 宋体;" lang="ZH-CN">个人复制前</span><span lang="EN-US">i</span><span style="font-family: 宋体;" lang="ZH-CN">本书的时间较大的时间</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>temp = Max(
Min(x-1, i), Sum(i+1, y) );<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( temp &lt;
f[x][y] )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f[x][y]
= temp;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return f[x][y];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Output
()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i, p;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 temp;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int slash[MAX];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>max = f[k][m];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(slash, 0, sizeof(slash));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>temp = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>p = k;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=m; i&gt;0; i--)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">让后面的员工尽量复印最多的书籍</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( temp +
book[i] &gt; max || i &lt; p )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>slash[i]
= 1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>temp
= book[i];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>p
--;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>temp
+= book[i];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=1; i&lt;=m; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%d",
book[i]);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if ( slash[i] ==
1 )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("
/ ");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else if ( i != m
)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("
");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void Solve
()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i, j;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="font-family: 宋体;" lang="ZH-CN">预处理书籍页数的和</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>total[0] = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (i=1; i&lt;=m; i++)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>total[i] =
total[i-1] + book[i];<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(f, -1, sizeof(f));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Min(k, m);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Output();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int main ()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int test;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%d",
&amp;test);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while ( test-- )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Input ();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Solve ();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%; font-family: 宋体;" lang="ZH-CN">程序分析与心得：</span></strong><strong><span style="font-size: 12pt; line-height: 115%;"><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">时间复杂度</span><span lang="EN-US">O(n<sup>2</sup>)</span><span style="font-family: 宋体;" lang="ZH-CN">，空间复杂度</span><span lang="EN-US">O(n<sup>2</sup>)</span><span style="font-family: 宋体;" lang="ZH-CN">。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;" lang="ZH-CN">在用记忆化搜索解决</span><span lang="EN-US">DP</span><span style="font-family: 宋体;" lang="ZH-CN">问题时，往往比较符合人的思维，容易想到模型，编程比较简单。在解题过程中，除了可以按照常理顺着推，也可以尝试逆向思维，从最后的状态倒着推，这样可以使问题想得更加透彻，有比较好的效果。</span><span lang="EN-US"><o:p></o:p></span></p><img src ="http://www.cppblog.com/ACM-Boy/aggbug/44085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-03-10 15:11 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/03/10/44085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 2181 Jumping Cows</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/02/02/42409.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Sat, 02 Feb 2008 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/02/02/42409.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/42409.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/02/02/42409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/42409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/42409.html</trackback:ping><description><![CDATA[题目大意：<br>&nbsp;&nbsp;&nbsp; 给你n个药的序列，牛从时间1开始吃药，在奇数时间吃药可以增加弹跳力，在偶数时间吃药则会减少弹跳力。在某一时间，你可以跳过一些药，但一旦吃过某种药，你就不能在选前面的药了。问你某一个吃药的序列，使牛最终的弹跳力最大。<br><br>思路：<br>&nbsp;&nbsp;&nbsp; 虽然题目不难，但思考题目的过程十分有意思。对于某种药，共有4中状态：在奇数时间吃、在奇数时间不吃、在偶数时间吃以及在偶数时间不吃。关键在于这4种状态之间的转移。因为如果跳过某种药是不需要花费时间的，所以在某2次的吃药时间内，时间相当于是静止的，一直维持在第1次吃药的时间段内。<br>&nbsp;&nbsp;&nbsp; 所以可用一数组max[i][2][2]表示状态，第i种药在奇/偶时间段内吃/不吃。可得状态转移可表示为：<br>&nbsp;&nbsp;&nbsp; max[i][0][0] = Max (max[i-1][0][0], max[i-1][0][1]);<br>&nbsp;&nbsp;&nbsp; max[i][0][1] = Max (max[i-1][1][0], max[i-1][1][1]) - high[i];<br>&nbsp;&nbsp;&nbsp; max[i][1][0] = Max (max[i-1][1][0], max[i-1][1][1]);<br>&nbsp;&nbsp;&nbsp; max[i][1][1] = Max (max[i-1][0][0], max[i-1][0][1]) + high[i];<br><br>代码：<br><br>#include &lt;iostream&gt;<br>using namespace std;<br><br>const int MAX = 150005;<br>int high[MAX];<br>int max[MAX][2][2];<br>int n;<br><br>void Input ()<br>{<br>&nbsp;&nbsp;&nbsp; scanf("%d", &amp;n);<br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%d", &amp;high[i]);<br><br>}<br><br>int Max (int a, int b)<br>{<br>&nbsp;&nbsp;&nbsp; return ( a&gt;b?a:b );<br>}<br><br>void Solve ()<br>{<br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max[i][0][0] = Max (max[i-1][0][0], max[i-1][0][1]);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max[i][0][1] = Max (max[i-1][1][0], max[i-1][1][1]) - high[i];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max[i][1][0] = Max (max[i-1][1][0], max[i-1][1][1]);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max[i][1][1] = Max (max[i-1][0][0], max[i-1][0][1]) + high[i];<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; printf("%d\n", Max ( Max(max[n][0][0], max[n][0][1]), Max(max[n][1][0], max[n][1][1])) );<br>}<br><br>int main ()<br>{<br>&nbsp;&nbsp;&nbsp; Input ();<br>&nbsp;&nbsp;&nbsp; Solve ();<br><br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><img src ="http://www.cppblog.com/ACM-Boy/aggbug/42409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-02-02 21:41 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/02/02/42409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 2559 Largest Rectangle in a Histogram</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/02/01/42366.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 01 Feb 2008 11:34:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/02/01/42366.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/42366.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/02/01/42366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/42366.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/42366.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑;">题目大意：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; 给定n个连续的长度为1的矩形的高度h（1&lt;=n&lt;=100000，0&lt;=hi&lt;=1000000000），问你其中能构成的最大矩形的面积是多少。</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">思路：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; 很显然，用DP。但关键是怎样表示状态，一开始想用一个二维数组min[][]表示从i～j的最小高度，面积就等于min[i][j]*(j-i+1)。但很不幸，根据题目给定的n的范围，这个二维数组根本无法创建。:(</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; 后来从论坛上得到提示，因为对于图中的某个面积最大的矩形，必然有一个最低的高度h[k]，即矩形的高等于h[k]，以第k块矩形的高度，最左边可以到达这个矩形的左边，最右边可以到达这个矩形的右边。所以，可以以每块矩形进行扩展，求出最左边和最右边（即两边的高度都大于等于这块的高度），得出面积s[i]，这样就可求出最大的s[i]了。</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">代码：</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">#include &lt;cstdio&gt;</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">const int MAX = 100005;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">__int64 h[MAX];</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">__int64 left[MAX], right[MAX];&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //left[i] = j表示第i个矩形以它的高度到达最左边的下标</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">int n;</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">bool Input ()</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">{</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; scanf("%d", &amp;n);</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; if ( n == 0 )</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; int i;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%I64d", &amp;h[i]);</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; h[0] = h[n+1] = -1;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; return true;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">}</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">void Solve ()</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">{</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; int i;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; __int64 temp, max;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; left[i] = right[i] = i;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while ( h[left[i]-1] &gt;= h[i] )</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; left[i] = left[left[i]-1];</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; for (i=n; i&gt;0; i--)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while ( h[right[i]+1] &gt;= h[i] )</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; right[i] = right[right[i]+1];</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; max = 0;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = h[i] * (right[i] - left[i] + 1);</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( temp &gt; max )</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max = temp;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; printf("%I64d\n", max);</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">}</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">int main ()</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">{</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; while ( Input() )</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Solve();</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp; return 0;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">}</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><img src ="http://www.cppblog.com/ACM-Boy/aggbug/42366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-02-01 19:34 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/02/01/42366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku 3486 Computers</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/01/28/42029.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Mon, 28 Jan 2008 06:45:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/01/28/42029.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/42029.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/01/28/42029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/42029.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/42029.html</trackback:ping><description><![CDATA[<p>题目大意：</p>
&nbsp;&nbsp;&nbsp; 给定一个时间期间n，电脑的价格c，以及电脑的维修费用m(y,z)（第y台电脑从y年用到第z年总的维修费用）。让你求出在期限n中使用电脑的最低费用。<br><br>思路：<br>&nbsp;&nbsp;&nbsp; 为了让总费用最低，你必须作出这样的决策：假设你正在使用某一台电脑已用到y年，你y+1年是继续用这台电脑，还是重新买第y+1台电脑（注意，这里的y+1是指输入中的第y+1行电脑，而不是指你已购买了y+1台电脑，因为y年只能买输入中的第y行电脑，为了不产生混淆，将电脑用编号表示）。显然，某一阶段的最优解并不能一定导致全局的最优解，所以肯定不能用贪心。<br>&nbsp;&nbsp;&nbsp; 我们从最后的情况来考虑，最后必然是某一个编号为y的电脑，从第y年使用到第n年，而前面的1～y-1年，自己只可能购买编号为1~y-1的电脑使用到y-1年。这样，问题的范围就减小了，从编号为1～n的电脑使用n年，降低到了编号为1～y-1的电脑使用y-1年。经分析，可推出递推式：<br>&nbsp;&nbsp;&nbsp; F[n] = min { F[i] + c + m[i+1][n] | 0&lt;=i&lt;=n-1 }<br>F[n]表示n台电脑使用n年的最低费用<br><br>代码：<br><br>#include &lt;cstdio&gt;<br>#include &lt;climits&gt;<br>#include &lt;cstring&gt;<br><br>const int MAX = 1005;<br>int n, c;<br>int mend[MAX][MAX];<br>int f[MAX];<br>int cost;<br><br>bool Input ()<br>{<br>&nbsp;&nbsp;&nbsp; if ( scanf("%d", &amp;c) == EOF )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp; scanf("%d", &amp;n);<br>&nbsp;&nbsp;&nbsp; int i, j;<br>&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j=i; j&lt;=n; j++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%d", &amp;mend[i][j]);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return true;<br>}<br><br><br>void Solve ()<br>{<br>&nbsp;&nbsp;&nbsp; int i, j;<br>&nbsp;&nbsp;&nbsp; memset(f, 0, sizeof(f));<br>&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; f[i] = INT_MAX;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j=0; j&lt;i; j++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( f[j] + mend[j+1][i] + c &lt; f[i] )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; f[i] = f[j] + mend[j+1][i] + c;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; printf("%d\n", f[n]);<br>}<br><br>int main ()<br>{<br>&nbsp;&nbsp;&nbsp; while ( Input() )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Solve ();<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br> <img src ="http://www.cppblog.com/ACM-Boy/aggbug/42029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-01-28 14:45 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/01/28/42029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1019 Number Sequence</title><link>http://www.cppblog.com/ACM-Boy/archive/2008/01/19/41474.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Sat, 19 Jan 2008 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2008/01/19/41474.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/41474.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2008/01/19/41474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/41474.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/41474.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 8pt;"><span style="font-size: 14pt;"><span style="font-size: 10pt;">题意：<br>
&nbsp;&nbsp;&nbsp; 就是有这样一个序列：1 12 123 1234 12345 .....，输入序列的下标，让你算出该序列所在下标的字符<br>
<br>
思路：<br>
&nbsp;&nbsp;&nbsp;
一开始想用字符串模拟来做，结果TLE。后来看了discuss，又想了一下，发现可以按规律将序列分成几段，然后再在每段中查找。具体做法是：先按序列
中数字的位数来分，112123...123456789是一段，1..10 1..11 1..12 ... 1..99是一段，1..100
...
1..999是一段，以此类推。确定了是在上面的哪一段以后，再按类似的思想确定这个下标是在哪个12345...n的序列，最后判断是在其中哪个数字的
哪一位。<br>
<br>
代码：<br>
#include &lt;iostream&gt;<br>
#include &lt;cmath&gt;<br>
using namespace std;<br>
<br>
const long long a[] = {0, 45, 9045, 1395495, 189414495, 2147483648};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //112123...9, 11231234...99, ... 的位数<br>
const long long b[] = {1, 11, 192, 2893, 38894, 488895, 5888896};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //1, 1234...10, 1234...100, ...的位数<br>
<br>
int digit (int n)<br>
{<br>
&nbsp;&nbsp;&nbsp; int ans = 1;<br>
&nbsp;&nbsp;&nbsp; while ( n / 10 != 0 )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n /= 10;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ans ++;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; return ans;<br>
}<br>
<br>
char Pos (int n, long long index)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在1234...n中找到下标为index的字符<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; long long i, j;<br>
&nbsp;&nbsp;&nbsp;&nbsp; long long pos = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp; for (i=1; i&lt;=n; i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos += digit(i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( pos &gt;= index )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp; pos -= digit(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定位在i上<br>
&nbsp;&nbsp;&nbsp;&nbsp; j = digit(i) - (index - pos);<br>
&nbsp;&nbsp;&nbsp;&nbsp; //if ( j == digit(i) - 1 )<br>
&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; cout&lt;&lt;endl;<br>
&nbsp;&nbsp;&nbsp;&nbsp; while ( j &gt; 0 )<br>
&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i /= 10;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j --;<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp; return (i % 10) + '0';<br>
}<br>
<br>
<br>
char Find (long long pos)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; long long p, t;<br>
&nbsp;&nbsp;&nbsp;&nbsp; int index = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp; int temp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; while ( a[index] &lt; pos )<br>
&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index ++;<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; p = a[index - 1];<br>
&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp; p += b[index - 1];<br>
&nbsp;&nbsp;&nbsp;&nbsp; temp = int(pow(10.0, index-1));<br>
&nbsp;&nbsp;&nbsp;&nbsp; t = b[index - 1] + index;<br>
&nbsp;&nbsp;&nbsp;&nbsp; while ( p &lt; pos )<br>
&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p += t;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t += index;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp ++;<br>
&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp; p -= t - index;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; return Pos(temp, pos-p);<br>
}<br>
<br>
int main ()<br>
{<br>
&nbsp;&nbsp;&nbsp; int test;<br>
&nbsp;&nbsp;&nbsp; long long i;<br>
&nbsp;&nbsp;&nbsp; cin&gt;&gt;test<br>
&nbsp;&nbsp;&nbsp; while ( test-- )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin&gt;&gt;i;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;Find(i)&lt;&lt;endl;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; return 0;</span></span></span></span></span></span> <img src ="http://www.cppblog.com/ACM-Boy/aggbug/41474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2008-01-19 16:46 <a href="http://www.cppblog.com/ACM-Boy/archive/2008/01/19/41474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU2975 Nim</title><link>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38025.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 07 Dec 2007 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38025.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/38025.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38025.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/38025.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/38025.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 一开始看还以为是一道博弈的题目，再仔细看才发现并不是博弈，也不是很难。大致意思是：有n堆石子，第i堆有Ki个石子，每轮一方可以从任意堆中取出一个或多个石子，所有石子都被取光时，游戏也结束了，那个最后一轮拿走石子的人就是胜利者。问你有多少种方法使对方处于必败的局面。题目并不难，是因为题目中已经告诉你了产生必败局面的条件：如果所有堆的石子数的异或和为0，那么处于此局面的人就必败。<br>&nbsp;&nbsp;&nbsp; 因为每次只能从一个堆中取石子，所以只要对于每个堆i，先求出其他所有堆的异或和temp，再看0～Ki-1与这个异或和再进行异或是否为0，只要为0就得到一种胜利的方法。自己先是想枚举0～Ki-1，与temp进行异或。后来感觉没有必要，只要Ki&gt;temp就可以了，因为若从堆i中取出x个石子，Ki-x异或temp==0 &lt;==&gt; Ki-x==temp，只要Ki&gt;temp，就存在Ki-x==temp。<br><br>#include &lt;cstdio&gt;<br><br>#define PILE 1001<br><br>__int64 stone[PILE], test;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //test为所有石子数的异或和<br>int piles;<br><br>bool Input ()<br>{<br>&nbsp;&nbsp;&nbsp; scanf("%d", &amp;piles);<br>&nbsp;&nbsp;&nbsp; if ( piles == 0 )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; for (i=0; i&lt;piles; i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scanf("%I64d", &amp;stone[i]);<br>&nbsp;&nbsp;&nbsp; return true;<br>}<br><br>void Solve ()<br>{<br>&nbsp;&nbsp;&nbsp; int i, ans;<br>&nbsp;&nbsp;&nbsp; __int64 temp;<br>&nbsp;&nbsp;&nbsp; test = 0;<br>&nbsp;&nbsp;&nbsp; ans = 0;<br>&nbsp;&nbsp;&nbsp; for (i=0; i&lt;piles; i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; test ^= stone[i];<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if ( test != 0 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (i=0; i&lt;piles; i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = test ^ stone[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //再与stone[i]做一次异或，相当于除stone[i]对其他所有堆的石子进行异或<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( stone[i] &gt; temp )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ans++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; printf("%d\n", ans);<br>}<br><br>int main ()<br>{<br>&nbsp;&nbsp;&nbsp; while ( Input() )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Solve();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br><br> <img src ="http://www.cppblog.com/ACM-Boy/aggbug/38025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2007-12-07 21:41 <a href="http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU2907 Collecting Beepers</title><link>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38019.html</link><dc:creator>ACM-Boy</dc:creator><author>ACM-Boy</author><pubDate>Fri, 07 Dec 2007 11:31:00 GMT</pubDate><guid>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38019.html</guid><wfw:comment>http://www.cppblog.com/ACM-Boy/comments/38019.html</wfw:comment><comments>http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38019.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ACM-Boy/comments/commentRss/38019.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ACM-Boy/services/trackbacks/38019.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 地图上有一些beeper，让你从起点搜集所有beeper，再回到起点。但你只可以水平或者竖直的走，不能走对角线。让你找出这样走的最短路径长度。<br>&nbsp;&nbsp;&nbsp; 因为地图最大只有20&#215;20，而beeper最多也只有10个，所以可以考虑用深搜，找到所有可能路径，在其中加一些简单的减枝就可以了。起初以为会超时，可最后还是0ms。：）<br><br>
<p align="center"><font color="#333399" size="4">Source Code</font></p>
<table style="font-size: 10pt;" align="center">
    <tbody>
        <tr>
            <td style="border: 1px dashed #7f7c75;"><strong>Problem:</strong> <a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2907">2907</a></td>
            <td style="border: 1px dashed #7f7c75;" width="10"><br></td>
            <td style="border: 1px dashed #7f7c75;"><strong>User:</strong> <a href="http://acm.pku.edu.cn/JudgeOnline/userstatus?user_id=QuXiao">QuXiao</a></td>
        </tr>
        <tr>
            <td style="border: 1px dashed #7f7c75;"><strong>Memory:</strong> 176K</td>
            <td style="border: 1px dashed #7f7c75;" width="10"><br></td>
            <td style="border: 1px dashed #7f7c75;"><strong>Time:</strong> 0MS</td>
        </tr>
        <tr>
            <td style="border: 1px dashed #7f7c75;"><strong>Language:</strong> C++</td>
            <td style="border: 1px dashed #7f7c75;" width="10"><br></td>
            <td style="border: 1px dashed #7f7c75;"><strong>Result:</strong> <font color="blue">Accepted</font></td>
        </tr>
    </tbody>
</table>
<ul>
    <li><font color="#333399" size="5">Source Code</font></li>
    <pre class="sh_cpp sh_sourcecode" style="font-family: Courier New,Courier,monospace;"><span class="sh_preproc">#include</span> <span class="sh_string">&lt;iostream&gt;</span><br><span class="sh_preproc">#include</span> <span class="sh_string">&lt;climits&gt;</span><br><span class="sh_keyword">using</span> <span class="sh_keyword">namespace</span> std<span class="sh_symbol">;</span><br><br><span class="sh_keyword">struct</span><span class="sh_normal"> </span><span class="sh_type">Point</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_type">int</span> x<span class="sh_symbol">,</span> y<span class="sh_symbol">;</span><br><span class="sh_cbracket">}</span><span class="sh_symbol">;</span><br><br><span class="sh_type">int</span> num<span class="sh_symbol">,</span> X<span class="sh_symbol">,</span> Y<span class="sh_symbol">;</span><br>Point start<span class="sh_symbol">,</span> beeper<span class="sh_symbol">[</span><span class="sh_number">15</span><span class="sh_symbol">];</span><br><span class="sh_type">int</span> shortest<span class="sh_symbol">;</span><br><span class="sh_type">int</span> visited<span class="sh_symbol">[</span><span class="sh_number">15</span><span class="sh_symbol">];</span><br><br><br><span class="sh_type">int</span> <span class="sh_function">Length </span><span class="sh_symbol">(</span>Point p1<span class="sh_symbol">,</span> Point p2<span class="sh_symbol">)</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_keyword">return</span> <span class="sh_function">abs</span><span class="sh_symbol">(</span>p1<span class="sh_symbol">.</span>x <span class="sh_symbol">-</span> p2<span class="sh_symbol">.</span>x<span class="sh_symbol">)</span> <span class="sh_symbol">+</span> <span class="sh_function">abs</span><span class="sh_symbol">(</span>p1<span class="sh_symbol">.</span>y <span class="sh_symbol">-</span> p2<span class="sh_symbol">.</span>y<span class="sh_symbol">);</span><br><span class="sh_cbracket">}</span><br><br><span class="sh_type">void</span> <span class="sh_function">Input </span><span class="sh_symbol">()</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_type">int</span> i<span class="sh_symbol">;</span><br>	cin<span class="sh_symbol">&gt;&gt;</span>X<span class="sh_symbol">&gt;&gt;</span>Y<span class="sh_symbol">;</span><br>	cin<span class="sh_symbol">&gt;&gt;</span>start<span class="sh_symbol">.</span>x<span class="sh_symbol">&gt;&gt;</span>start<span class="sh_symbol">.</span>y<span class="sh_symbol">;</span><br>	cin<span class="sh_symbol">&gt;&gt;</span>num<span class="sh_symbol">;</span><br>	<span class="sh_keyword">for</span> <span class="sh_symbol">(</span>i<span class="sh_symbol">=</span><span class="sh_number">0</span><span class="sh_symbol">;</span> i<span class="sh_symbol">&lt;</span>num<span class="sh_symbol">;</span> i<span class="sh_symbol">++)</span><br>		cin<span class="sh_symbol">&gt;&gt;</span>beeper<span class="sh_symbol">[</span>i<span class="sh_symbol">].</span>x<span class="sh_symbol">&gt;&gt;</span>beeper<span class="sh_symbol">[</span>i<span class="sh_symbol">].</span>y<span class="sh_symbol">;</span><br><span class="sh_cbracket">}</span><br><br><span class="sh_type">void</span> <span class="sh_function">DFS </span><span class="sh_symbol">(</span><span class="sh_type">int</span> cur<span class="sh_symbol">,</span> <span class="sh_type">int</span> len<span class="sh_symbol">,</span> <span class="sh_type">int</span> n<span class="sh_symbol">)</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_keyword">if</span> <span class="sh_symbol">(</span> n <span class="sh_symbol">==</span> num <span class="sh_symbol">)</span><br>	<span class="sh_cbracket">{</span><br>		<span class="sh_type">int</span> t <span class="sh_symbol">=</span> <span class="sh_function">Length</span><span class="sh_symbol">(</span>beeper<span class="sh_symbol">[</span>cur<span class="sh_symbol">],</span> start<span class="sh_symbol">);</span><br>		<span class="sh_keyword">if</span> <span class="sh_symbol">(</span> len <span class="sh_symbol">+</span>  t <span class="sh_symbol">&lt;</span> shortest <span class="sh_symbol">)</span><br>			shortest <span class="sh_symbol">=</span> len <span class="sh_symbol">+</span> t<span class="sh_symbol">;</span><br>	<span class="sh_cbracket">}</span><br>	<span class="sh_keyword">else</span> <span class="sh_keyword">if</span> <span class="sh_symbol">(</span> len <span class="sh_symbol">&lt;</span> shortest <span class="sh_symbol">)</span><br>	<span class="sh_cbracket">{</span><br>		<span class="sh_type">int</span> i<span class="sh_symbol">;</span><br>		<span class="sh_keyword">for</span> <span class="sh_symbol">(</span>i<span class="sh_symbol">=</span><span class="sh_number">0</span><span class="sh_symbol">;</span> i<span class="sh_symbol">&lt;</span>num<span class="sh_symbol">;</span> i<span class="sh_symbol">++)</span><br>		<span class="sh_cbracket">{</span><br>			<span class="sh_keyword">if</span> <span class="sh_symbol">(</span> visited<span class="sh_symbol">[</span>i<span class="sh_symbol">]</span> <span class="sh_symbol">==</span> <span class="sh_number">0</span> <span class="sh_symbol">)</span><br>			<span class="sh_cbracket">{</span><br>				visited<span class="sh_symbol">[</span>i<span class="sh_symbol">]</span> <span class="sh_symbol">=</span> <span class="sh_number">1</span><span class="sh_symbol">;</span><br>				<span class="sh_function">DFS </span><span class="sh_symbol">(</span>i<span class="sh_symbol">,</span> len<span class="sh_symbol">+</span><span class="sh_function">Length</span><span class="sh_symbol">(</span>beeper<span class="sh_symbol">[</span>cur<span class="sh_symbol">],</span> beeper<span class="sh_symbol">[</span>i<span class="sh_symbol">]),</span> n<span class="sh_number">+1</span><span class="sh_symbol">);</span><br>				visited<span class="sh_symbol">[</span>i<span class="sh_symbol">]</span> <span class="sh_symbol">=</span> <span class="sh_number">0</span><span class="sh_symbol">;</span><br>			<span class="sh_cbracket">}</span><br>		<span class="sh_cbracket">}</span><br>	<span class="sh_cbracket">}</span><br><span class="sh_cbracket">}</span><br><br><br><span class="sh_type">void</span> <span class="sh_function">Solve </span><span class="sh_symbol">()</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_type">int</span> i<span class="sh_symbol">,</span> t<span class="sh_symbol">;</span><br>	shortest <span class="sh_symbol">=</span> INT_MAX<span class="sh_symbol">;</span><br>	<span class="sh_function">memset</span><span class="sh_symbol">(</span>visited<span class="sh_symbol">,</span> <span class="sh_number">0</span><span class="sh_symbol">,</span> <span class="sh_keyword">sizeof</span><span class="sh_symbol">(</span>visited<span class="sh_symbol">));</span><br>	<span class="sh_keyword">for</span> <span class="sh_symbol">(</span>i<span class="sh_symbol">=</span><span class="sh_number">0</span><span class="sh_symbol">;</span> i<span class="sh_symbol">&lt;</span>num<span class="sh_symbol">;</span> i<span class="sh_symbol">++)</span><br>	<span class="sh_cbracket">{</span><br>		t <span class="sh_symbol">=</span> <span class="sh_function">Length</span><span class="sh_symbol">(</span>beeper<span class="sh_symbol">[</span>i<span class="sh_symbol">],</span> start<span class="sh_symbol">);</span><br>		visited<span class="sh_symbol">[</span>i<span class="sh_symbol">]</span> <span class="sh_symbol">=</span> <span class="sh_number">1</span><span class="sh_symbol">;</span><br>		<span class="sh_function">DFS </span><span class="sh_symbol">(</span>i<span class="sh_symbol">,</span> t<span class="sh_symbol">,</span> <span class="sh_number">1</span><span class="sh_symbol">);</span><br>		visited<span class="sh_symbol">[</span>i<span class="sh_symbol">]</span> <span class="sh_symbol">=</span> <span class="sh_number">0</span><span class="sh_symbol">;</span><br>	<span class="sh_cbracket">}</span><br>	cout<span class="sh_symbol">&lt;&lt;</span><span class="sh_string">"The shortest path has length "</span><span class="sh_symbol">&lt;&lt;</span>shortest<span class="sh_symbol">&lt;&lt;</span>endl<span class="sh_symbol">;</span><br><span class="sh_cbracket">}</span><br><br><span class="sh_type">int</span> <span class="sh_function">main </span><span class="sh_symbol">()</span><br><span class="sh_cbracket">{</span><br>	<span class="sh_type">int</span> test<span class="sh_symbol">;</span><br>	cin<span class="sh_symbol">&gt;&gt;</span>test<span class="sh_symbol">;</span><br>	<span class="sh_keyword">while</span> <span class="sh_symbol">(</span> test<span class="sh_symbol">--</span> <span class="sh_symbol">)</span><br>	<span class="sh_cbracket">{</span><br>		<span class="sh_function">Input </span><span class="sh_symbol">();</span><br>		<span class="sh_function">Solve </span><span class="sh_symbol">();</span><br>	<span class="sh_cbracket">}</span><br><br>	<span class="sh_keyword">return</span> <span class="sh_number">0</span><span class="sh_symbol">;</span><br><span class="sh_cbracket">}</span>
    </pre>
</ul>
<br><br><br><img src ="http://www.cppblog.com/ACM-Boy/aggbug/38019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ACM-Boy/" target="_blank">ACM-Boy</a> 2007-12-07 19:31 <a href="http://www.cppblog.com/ACM-Boy/archive/2007/12/07/38019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>