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

<channel>
	<title>Beyond the Void &#187; 1999</title>
	<atom:link href="http://www.byvoid.com/blog/tag/1999/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.byvoid.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 08:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>NOI 1999 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-1999-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-1999-solution/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 05:13:54 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[NOI1999]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[差分约束系统]]></category>
		<category><![CDATA[最短路径]]></category>
		<category><![CDATA[负权回路]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=896</guid>
		<description><![CDATA[NOI1999的6道题分别是[钉子和小球][棋盘分割][生日蛋糕][最优连通子集][01串][内存分配]。六道题个题难易差别不太大，没有送分题，也没有特别困难的题。 [钉子和小球]是概率递推问题，需要处... ]]></description>
			<content:encoded><![CDATA[<p>NOI1999的6道题分别是[钉子和小球][棋盘分割][生日蛋糕][最优连通子集][01串][内存分配]。六道题个题难易差别不太大，没有送分题，也没有特别困难的题。</p>
<p>[钉子和小球]是概率递推问题，需要处理分数。[棋盘分割]是一个动态规划问题，但是很容易想成搜索。[生日蛋糕]是经典的搜索+剪枝，强力剪枝需要对题目足够透彻地分析，还需要一定的数学推导。[最优连通子集]是一个树形动态规划问题，题目描述全部以各种定义给出，需要耐心读题，仔细分析。[01串]的解决需要构造差分约束系统，然后利用最短路径算法求解，其数学模型有一定隐蔽性。[内存分配]是一道模拟题，但其细节却十分复杂，容易遗漏各种情况，需要缜密的思维和良好的编程能力。</p>
<p>做1999年的题我花了4天时间，还需继续努力。<br />
<span id="more-896"></span><br />
<strong>[钉子和小球]</strong></p>
<p>这道题算是个递推问题吧。我们可以知道小球落到钉子上以后，或向左右各有1/2的概率继续下落，根据条件概率的计算公式，设落到该位置的概率为F[i,j]，则有</p>
<pre>F[i,j] = Sum
{
	F[i-1,j]*1/2, 		(如果(i-1,j)有钉子)
	F[i-1,j-1]*1/2, 	(如果(i-1,j-1)有钉子)
	F[i-2,j-1],		(如果(i-1,j-1)没有钉子)
}</pre>
<p>有了上述公式，可以很容易地求出F[N+1,M+1]的值，注意题意没有说清第M个是哪个，但是从样例看来是(N+1,M+1)出的概率。</p>
<p>还有一个问题，题上要求输出一个既约分数，所以我们在计算F[i,j]时要按分数计算规则，加法要通分，算完要约分。注意要使用64位长整 型(long long)，因为分母可能很大，为了防止溢出，通分要通分到分母的最小公倍数，其中lcm(a,b)=a/gcd(a,b)*b，lcm是最小公倍 数，gcd是最大公约数，防止溢出要先除。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code7'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8967"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
</pre></td><td class="code" id="p896code7"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 ball
 * Author: Guo Jiabao
 * Time: 2009.2.23
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">52</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">typename</span> T<span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">class</span> fraction
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	T den,num<span style="color: #008080;">;</span>
	fraction<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>den<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>,num<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
	T gcd<span style="color: #008000;">&#40;</span>T a,T b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		T c<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			c<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
			b<span style="color: #000080;">=</span>a <span style="color: #000040;">%</span> b<span style="color: #008080;">;</span>
			a<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> common<span style="color: #008000;">&#40;</span>fraction <span style="color: #000040;">*</span>A<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		T comt<span style="color: #000080;">=</span>den<span style="color: #000040;">/</span>gcd<span style="color: #008000;">&#40;</span>den,A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>den<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>den<span style="color: #008080;">;</span>
		A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>num<span style="color: #000040;">*</span><span style="color: #000080;">=</span>comt<span style="color: #000040;">/</span>A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>den<span style="color: #008080;">;</span>
		num<span style="color: #000040;">*</span><span style="color: #000080;">=</span>comt<span style="color: #000040;">/</span>den<span style="color: #008080;">;</span>
		A<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>den<span style="color: #000080;">=</span>den<span style="color: #000080;">=</span>comt<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> reduce<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		T g<span style="color: #000080;">=</span>gcd<span style="color: #008000;">&#40;</span>num,den<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		num<span style="color: #000040;">/</span><span style="color: #000080;">=</span>g<span style="color: #008080;">;</span>
		den<span style="color: #000040;">/</span><span style="color: #000080;">=</span>g<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>num<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			den<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> plus<span style="color: #008000;">&#40;</span>fraction A<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		common<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		num<span style="color: #000040;">+</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">num</span><span style="color: #008080;">;</span>
		reduce<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	fraction devide<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		fraction A<span style="color: #000080;">=</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
		A.<span style="color: #007788;">den</span><span style="color: #000040;">*</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		A.<span style="color: #007788;">reduce</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> A<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
fraction<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #000080;">&gt;</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> nail<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ball.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ball.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">do</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">||</span> c<span style="color: #000080;">==</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">ungetc</span><span style="color: #008000;">&#40;</span>c,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>i<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">do</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'*'</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'.'</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #FF0000;">'*'</span><span style="color: #008000;">&#41;</span>
				nail<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #FF0000;">'.'</span><span style="color: #008000;">&#41;</span>
				nail<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">num</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>i<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>nail<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">plus</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">devide</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">plus</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">devide</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">plus</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lld/%lldn&quot;</span>,F<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>M<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">num</span>,F<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>M<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">den</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[棋盘分割]</strong></p>
<p>貌似为搜索题，其实可以动态规划。首先平均值是一个常数，因为已经给定了所有的格子中的数，和总共的块数，所以可以首先算出平均值。</p>
<p>状态设定</p>
<ul>
<li>F[i,x1,y1,x2,y2]为在(x1,y1)-(x2,y2)的矩阵内，分成i块的最小的(每块的值-平均值)^2。</li>
</ul>
<p>状态转移方程</p>
<pre>F[i,x1,y1,x2,y2]=Min
{
	F[1,x1,y1,k,y2] + F[i-1,k+1,y1,x2,y2]; (x1&lt;=k&lt;=x2-1) //左右切割
	F[1,x1,y1,x2,k] + F[i-1,x1,k+1,x2,y2]; (y1&lt;=k&lt;=y2-1) //上下切割
}</pre>
<p>目标结果</p>
<ul>
<li>Ans = sqrt(F[N,1,1,H,W] / N)</li>
</ul>
<p>初始条件</p>
<ul>
<li>F[1,x1,y1,x2,y2]为(x1,y1)-(x2,y2)的矩阵中所有数的和。</li>
</ul>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8968"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
</pre></td><td class="code" id="p896code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 division
 * Author: Guo Jiabao
 * Time: 2009.2.24 14:01
 * State: Solved
 * Memo: 动态规划
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">16</span>,MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">9</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> INF<span style="color: #000080;">=</span><span style="color:#800080;">1e20</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span>,Ans,avg<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> V<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,H,W<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;division.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;division.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	H<span style="color: #000080;">=</span>W<span style="color: #000080;">=</span><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>H<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>,<span style="color: #000040;">&amp;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			avg<span style="color: #000040;">+</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	avg<span style="color: #000040;">/</span><span style="color: #000080;">=</span>N<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,x1,y1,x2,y2,k,p,q<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x1<span style="color: #000080;">&lt;=</span>H<span style="color: #008080;">;</span>x1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>y1<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y1<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>y1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x2<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x2<span style="color: #000080;">&lt;=</span>H<span style="color: #008080;">;</span>x2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>y2<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y2<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>y2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>x2<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
						<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>y1<span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>y2<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
							F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span>avg<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span>avg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x1<span style="color: #000080;">&lt;=</span>H<span style="color: #008080;">;</span>x1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>y1<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y1<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>y1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x2<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>x2<span style="color: #000080;">&lt;=</span>H<span style="color: #008080;">;</span>x2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>y2<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>y2<span style="color: #000080;">&lt;=</span>W<span style="color: #008080;">;</span>y2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
						<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>p<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>p<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
						<span style="color: #008000;">&#123;</span>
							q<span style="color: #000080;">=</span>i<span style="color: #000040;">-</span>p<span style="color: #008080;">;</span>
							<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span>x2<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
								<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> F<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
									F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> F<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
							<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span>y1<span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span>y2<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
								<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> F<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
									F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> F<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
						<span style="color: #008000;">&#125;</span>
					<span style="color: #008000;">&#125;</span>
	Ans<span style="color: #000080;">=</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>W<span style="color: #008000;">&#93;</span> <span style="color: #000040;">/</span> N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%.3lfn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[生日蛋糕]</strong></p>
<p>搜索，显然暴力是会超时的，优化的技巧很重要。按照从底到顶以此搜索每层的半径和高度。 注，由于π是多余的，下文在所有计算中均省略了π。</p>
<p><strong>剪枝1</strong></p>
<ul>
<li>当还有p层没有搜索，最少需要的体积是V&#8217;=∑(i^3)(1&lt;=i&lt;=p)，即以上p层全是半径为1高为1。如果当前剩余的体积是V，小于最少需要的体积V&#8217;，则不可能完成搜索，剪枝。</li>
</ul>
<p><strong>剪枝2</strong></p>
<ul>
<li>与剪枝1类似，当还有p层没有搜索，设当前顶层的半径是R，高是H，最多需要的体积是V&#8217;=∑((R-i)^2*(H-i))(1&amp; lt;=i&lt;=p)，即以上p层的半径和高都以最小的公差递减。如果当前剩余的体积是V，大于最多需要的体积V&#8217;，则一定会有剩余，剪枝。</li>
</ul>
<p><strong>剪枝3</strong></p>
<ul>
<li>考虑满足当前剩余体积V，所构成的其余层最小的面积S&#8217;，若当前的面积是S，已知最优解是MinS，如果S+S&#8217;&gt;Mins，继续 搜索没有意义，剪枝。关键在于如何求出S&#8217;。根据推理，已经知道S&#8217;=3 * V ^ (2/3) &#8211; (R[k]-1)*(R[k]-1)，R[k]为当前层的半径，下面是推理过程。</li>
</ul>
<p>假设只有一层，体积为V=R^2*H，表面积S=R^2+2*R*H，可以推导出S的最小值，过程如下：</p>
<pre>	S  = R^2 + 2*R*H
	   = V/H + 2*V/R
	   = V * ( 1/H + 1/R + 1/R )
	由均值不等式
	S &gt;= V * 3 * (1/(H*R^2))^(1/3)
	   = 3 * V * (1/V)^(1/3)
	   = 3 * V ^ (2/3)
	当 H=R 时，等号成立，S最小值=3 * V ^ (2/3)</pre>
<p>上述为只有一层的情况，推广到多层，还是一层是面积最小的，证明如下：</p>
<p>若体积为V蛋糕已有k层(k&gt;=1)，设第k层半径为R[k]，高为H[k]，体积为V[k]。 若从顶层蛋糕截取高为ΔH的部分，其体积为ΔV，把它重塑成第k+1层，半径为R[k+1]，高为H[k+1]。 ΔV = R[k+1]^2 * H[k+1] = R[k]^2 * ΔH  (1) 设重塑后蛋糕总表面积的增量为ΔS，则有</p>
<pre>	ΔS = 2 * R[k+1] * H[k+1] - 2 * R[k] * ΔH
	    = 2 * ΔV / R[k+1] + 2 * ΔV / R[k]
	    = 2 * ΔV * (1 / R[k+1] - 1 / R[k])
	因为 R[k+1] &lt; R[k]，所以 1 / R[k+1] &gt; 1 / R[k]，
	所以ΔS&gt;0，即表面积增大。</pre>
<p>由上述证明我们可以得出对于给定的体积V，构成最小表面积的蛋糕一定为一层，而且表面积最小值为3 * V ^ (2/3)。但是在剪枝3中，上层的蛋糕是不用计算表面积的，所以应减去上面一层最大可能的表面积，即S&#8217;=3 * V ^ (2/3) &#8211; (R[k]-1)*(R[k]-1)，R[k]为当前层的半径。</p>
<p>应用上述三个剪枝，才能通过这道题的所有测试数据。实际上在真正编程是并不是很复杂，但是想到这三个剪枝的思维量还是很大的，所以说这不愧为一个经典的搜索问题。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code9'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8969"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
</pre></td><td class="code" id="p896code9"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 cake
 * Author: Guo Jiabao
 * Time: 2009.2.24 21:27
 * State: Solved
 * Memo: 不等式剪枝搜索
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">21</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> V,M,Ans<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> R<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,H<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span>,prefix<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cake.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cake.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>V,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		prefix<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>prefix<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>i<span style="color: #000040;">*</span>i<span style="color: #000040;">*</span>i<span style="color: #008080;">;</span>
	R<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>H<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span>V<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span> M<span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>M<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> least<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> V<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span>V,<span style="color:#800080;">2.0</span><span style="color: #000040;">/</span><span style="color:#800080;">3.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> last<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> R,<span style="color: #0000ff;">int</span> H,<span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,p<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>k<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		p<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>R<span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>R<span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>H<span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k,<span style="color: #0000ff;">int</span> rV,<span style="color: #0000ff;">int</span> cS<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> nV,nS,pS<span style="color: #000080;">=</span>cS<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> mS<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			pS<span style="color: #000080;">=</span>cS<span style="color: #000040;">+</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;=</span>rV<span style="color: #008080;">;</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			nS<span style="color: #000080;">=</span>pS<span style="color: #000040;">+</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			nV<span style="color: #000080;">=</span>rV<span style="color: #000040;">-</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>nV<span style="color: #000080;">&lt;</span>prefix<span style="color: #008000;">&#91;</span>M<span style="color: #000040;">-</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>nV<span style="color: #000080;">&gt;</span>last<span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>,H<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>,M<span style="color: #000040;">-</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
			mS<span style="color: #000080;">=</span>least<span style="color: #008000;">&#40;</span>nV<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>nS<span style="color: #000040;">+</span>mS<span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>M<span style="color: #008000;">&#41;</span>
				dfs<span style="color: #008000;">&#40;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,nV,nS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>nS<span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span>
				Ans<span style="color: #000080;">=</span>nS<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dfs<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,V,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[最优连通子集]</strong></p>
<p>把每个点抽象成图中的顶点，相邻的点连接一条无向边，每个顶点都有其权值。从题中定义4可以看出，图中每两点之间有且只有一条路径，所以这是一棵树。而最大连通子集，就是树中权值之和最大的部分，如此可以动态规划。</p>
<p>状态设定</p>
<ul>
<li>F[i]为以顶点i为根的子树的最大权值之和</li>
<li>C[i]为顶点i的权值</li>
</ul>
<p>状态转移方程</p>
<ul>
<li>F[i] = C[i] + Σ{ F[j] | j为i的子节点，且F[j]&gt;0 }</li>
</ul>
<p>目标状态</p>
<ul>
<li>F[root] root为根节点</li>
</ul>
<p>由于该树根不固定，枚举每个点为根，保留最大值。时间复杂度为O(N^2)。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code10'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89610"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code" id="p896code10"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 subset
 * Author: Guo Jiabao
 * Time: 2009.2.27 13:38
 * State: Solved
 * Memo: 树形动态规划
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> point<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #0000ff;">int</span> t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> vertex<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span><span style="color: #0000ff;">int</span> c,s<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,EC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Ans<span style="color: #008080;">;</span>
edge ES<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> ABS<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> a<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">?</span>a<span style="color: #008080;">:</span><span style="color: #000040;">-</span>a<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;subset.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;subset.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span>,<span style="color: #000040;">&amp;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ABS<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> ABS<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				addedge<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				addedge<span style="color: #008000;">&#40;</span>j,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> compute<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> u,<span style="color: #0000ff;">int</span> f<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> v<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000040;">!</span><span style="color: #000080;">=</span>f<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			compute<span style="color: #008000;">&#40;</span>v,u<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		compute<span style="color: #008000;">&#40;</span>i,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[01串]</strong></p>
<p>解决这道题可以构造<a title="差分约束系统" href="http://www.ruvtex.cn/wiki/%E5%B7%AE%E5%88%86%E7%BA%A6%E6%9D%9F%E7%B3%BB%E7%BB%9F">差分约束系统</a>。为了方便表述，我们定义C[i]为串的前i位之和，显然有S[i] = C[i] &#8211; C[i-1]。</p>
<p>根据C的意义，我们可以很容易得出约束条件 0 &lt;= C[i] &#8211; C[i-1] &lt;= 1 ①。</p>
<p>当i&gt;=L1时，从S[i-L1+1]至S[i]，长度为L1的子串，其中1的个数为C[i] &#8211; C[i-L1]。根据题中条件，应满足 A[1] &lt;= C[i] &#8211; C[i-L1] &lt;= B[1] ②。同样的，当i&gt;=L0，从S[i-L0+1]至S[i]，长度为L0的子串，其中0的个数为L0 &#8211; (C[i] &#8211; C[i-L1])，应满足 A[0] &lt;= L0 &#8211; (C[i] &#8211; C[i-L1]) &lt;= A[1]③。</p>
<p>由上述①②③3个不等式，可以得出</p>
<ul>
<li>C[i] &#8211; C[i-1] &lt;= 1 (1&lt;=i&lt;=N)</li>
<li>C[i-1] &#8211; C[i] &lt;= 0 (1&lt;=i&lt;=N)</li>
<li>C[i-L[1]] &#8211; C[i] &lt;= -A[1] (i-L[1]&gt;=0)</li>
<li>C[i] &#8211; C[i-L[1]] &lt;= B[1] (i-L[1]&gt;=0)</li>
<li>C[i] &#8211; C[i-L[0]] &lt;= L[0]-A[0] (i-L[0]&gt;=0)</li>
<li>C[i-L[0]] &#8211; C[i] &lt;= B[0]-L[0] (i-L[0]&gt;=0)</li>
</ul>
<p>根据以上构造差分约束系统，求出C的一组可行解即可。具体要用到SPFA算法求最短路，如果出现负权圈，则说明无解。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code11'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89611"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
</pre></td><td class="code" id="p896code11"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 sequence
 * Author: Guo Jiabao
 * Time: 2009.2.27 20:45
 * State: Solved
 * Memo: 差分约束系统 SPFA判断负权圈
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span>,MAXP<span style="color: #000080;">=</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">10</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> t,c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>ES<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> vertex
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> sp<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> qlist
<span style="color: #008000;">&#123;</span>
	qlist <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,EC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Q_Size<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> Q_In<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> RelaxCount<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
qlist <span style="color: #000040;">*</span>qf,<span style="color: #000040;">*</span>ql<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> Q_Insert_Tail<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Q_Size<span style="color: #008000;">&#41;</span>
		ql<span style="color: #000080;">=</span>ql<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> qlist<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		qf<span style="color: #000080;">=</span>ql<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> qlist<span style="color: #008080;">;</span>
	ql<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	ql<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
	Q_Size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	Q_In<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> Q_Pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span>qf<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
	Q_In<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	Q_Size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	qlist <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>qf<span style="color: #008080;">;</span>
	qf<span style="color: #000080;">=</span>qf<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;sequence.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;sequence.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> c<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">t</span><span style="color: #000080;">=</span>b<span style="color: #008080;">;</span> ES<span style="color: #008000;">&#91;</span>EC<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> construct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		addedge<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,i,N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;=</span> L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			addedge<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,i,L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			addedge<span style="color: #008000;">&#40;</span>i,i<span style="color: #000040;">-</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;=</span> L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			addedge<span style="color: #008000;">&#40;</span>i,i<span style="color: #000040;">-</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">-</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			addedge<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span>L<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,i, B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&lt;</span> N<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			addedge<span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,i,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			addedge<span style="color: #008000;">&#40;</span>i,i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> u,v,c<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>u<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>u<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>u<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q_Insert_Tail<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q_Size<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		u<span style="color: #000080;">=</span>Q_Pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>edge <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			v<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span> c<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span> <span style="color: #000040;">+</span> c <span style="color: #000080;">&lt;</span> V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				RelaxCount<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>RelaxCount<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;=</span>N<span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
				V<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span> <span style="color: #000080;">=</span> V<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span> <span style="color: #000040;">+</span> c<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>Q_In<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					Q_Insert_Tail<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> decode<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,M<span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #000080;">&lt;</span>M<span style="color: #008000;">&#41;</span>
			M<span style="color: #000080;">=</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #000040;">-</span><span style="color: #000080;">=</span>M<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #000040;">-</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sp</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	construct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>spfa<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		decode<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> 
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;-1n&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[内存分配]</strong></p>
<p>这道题看似容易，却有着很容易忽略的致命的细节问题！在写这道题时，由于没有看清数据范围，我首先写了基于线段树的方法，但是对于10^9，空间是不足的，于是改用链表。</p>
<p>建立一个进程链表，每个单元表示一个内存区段。在申请空间时，遍历链表，寻找两个相邻区段之间的空闲部分长度不小于所需要的空间的位置。如 果不能找到，则此时无法将该进程放入，否则就在该位置插入一个内存区段。为了加快查找速度，我们可以在插入时把连续的内存区段合并为一块。</p>
<p>当删除一个区段时，在链表中查找到包含待删除的区段的位置，在两端可以直接修改，否则将该块裂开为两块。</p>
<p>为了能够快速删除已经结束的进程，还需要建立一个堆，维护进程的结束时间。对于每个请求，在处理之前，要先把该进程开始时间之前的已经结束 的进程删除。每次删除的同时，还要将处理等待队列。注意，每次一定要把所有结束时间相同的进程一起删除后，才能尝试将等待队列中的首元素加入。之后，在尝 试将新的进程加入内存，如果没有空间，就加入等待队列。在加入进程到内存中时，计算它的结束时间，然后加入堆中。在处理完成所有新进程后，还要把等待队列 和内存中剩余的进程处理完。</p>
<p>根据上述过程模拟，全部进程都运行完毕的时刻和被放入过等待队列的进程总数是很容易统计出的。还是细节决定成败。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p896code12'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p89612"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
</pre></td><td class="code" id="p896code12"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1999 memory
 * Author: Guo Jiabao
 * Time: 2009.2.26 13:52
 * State: Solved
 * Memo: 堆 + 链表
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXP<span style="color: #000080;">=</span><span style="color: #0000dd;">10001</span>,MAX<span style="color: #000080;">=</span><span style="color: #0000dd;">1000000001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> proc
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> starttime,runtime,endtime,size,a,b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>P<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> blk
<span style="color: #008000;">&#123;</span>
	blk <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> a,b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>BS<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,Total,temporary,Heapsize,Qcnt,Etime<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Queue<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span>,QH,QT,BC,Heap<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span>,R<span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
blk <span style="color: #000040;">*</span>blk_first,<span style="color: #000040;">*</span>blk_last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> fst<span style="color: #008080;">;</span>
<span style="color: #0000ff;">inline</span> blk <span style="color: #000040;">*</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">&amp;</span>BS<span style="color: #008000;">&#91;</span>BC<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;memory.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;memory.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>Total<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">;;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		N<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">starttime</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">runtime</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">starttime</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> P<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">runtime</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			N<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	P<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	blk_first<span style="color: #000080;">=</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	blk_last<span style="color: #000080;">=</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	blk_first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>blk_first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	blk_last<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	blk_last<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>blk_last<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>Total<span style="color: #008080;">;</span>
	blk <span style="color: #000040;">*</span>p,<span style="color: #000040;">*</span>q<span style="color: #008080;">;</span>
	p<span style="color: #000080;">=</span>blk_first<span style="color: #008080;">;</span>
	q<span style="color: #000080;">=</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>blk_last<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Heap_insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,f<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #000040;">++</span>Heapsize<span style="color: #008080;">;</span>P<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">&lt;</span>P<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>f<span style="color: #000080;">=</span>i<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>f<span style="color: #008000;">&#41;</span>
		Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Heap_remove<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,c,p<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>Heapsize<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">=</span>i<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;=</span>Heapsize<span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>c<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>Heapsize <span style="color: #000040;">&amp;&amp;</span> P<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">&lt;</span>P<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008000;">&#41;</span>
			c<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">&lt;</span>P<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008000;">&#41;</span>
			Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	Heapsize<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> blk<span style="color: #000040;">*</span> blk_find<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> size<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	blk <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>blk_first<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000040;">-</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">&gt;=</span>size<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> blk_insert<span style="color: #008000;">&#40;</span>blk <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> size<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000040;">+</span><span style="color: #000080;">=</span>size<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">==</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> blk_remove<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	blk <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>blk_first,<span style="color: #000040;">*</span>q,<span style="color: #000040;">*</span>r<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> size<span style="color: #000080;">=</span>b<span style="color: #000040;">-</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a <span style="color: #000040;">&amp;&amp;</span> b<span style="color: #000080;">&lt;=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">==</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a <span style="color: #000040;">&amp;&amp;</span> b<span style="color: #000080;">==</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">!</span><span style="color: #000080;">=</span>blk_first<span style="color: #008000;">&#41;</span>
					p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">else</span>
					q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">==</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">!</span><span style="color: #000080;">=</span>blk_first<span style="color: #008000;">&#41;</span>
					q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000040;">+</span><span style="color: #000080;">=</span>size<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">else</span>
				<span style="color: #008000;">&#123;</span>
					r<span style="color: #000080;">=</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
					r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
					q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>b<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008000;">&#41;</span>
				q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000040;">-</span><span style="color: #000080;">=</span>size<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
			<span style="color: #008000;">&#123;</span>
				r<span style="color: #000080;">=</span>blk_new<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span> q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
				r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>a<span style="color: #000080;">=</span>b<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> r<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #008080;">;</span>
				q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> join<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> q,<span style="color: #0000ff;">int</span> T,blk <span style="color: #000040;">*</span>p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span><span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>b<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span><span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	blk_insert<span style="color: #008000;">&#40;</span>p,P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">=</span>T<span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">runtime</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	Heap_insert<span style="color: #008000;">&#40;</span>q<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> process_wait<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> T<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//处理队列中元素，以T+1为开始时间</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>QH<span style="color: #000080;">&lt;=</span>QT<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> q<span style="color: #000080;">=</span>Queue<span style="color: #008000;">&#91;</span>QH<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		blk <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>blk_find<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span>
			join<span style="color: #008000;">&#40;</span>Queue<span style="color: #008000;">&#91;</span>QH<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span>,T<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> freeonce<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> T<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> CR<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,q,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Heapsize <span style="color: #000040;">&amp;&amp;</span> P<span style="color: #008000;">&#91;</span>q<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		R<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>CR<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
		Heap_remove<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span> <span style="color: #000080;">&gt;</span> Etime<span style="color: #008000;">&#41;</span>
			Etime<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>CR<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		q<span style="color: #000080;">=</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		blk_remove<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span>,P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> freespace<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> T<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> t,q<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Heapsize<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//释放内存</span>
	<span style="color: #008000;">&#123;</span>
		q<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		t<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>t<span style="color: #000080;">&lt;</span>T<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			freeonce<span style="color: #008000;">&#40;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			process_wait<span style="color: #008000;">&#40;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//处理等待队列</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> process<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> T,i,t<span style="color: #008080;">;</span>
	QT<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>QH<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		T<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">starttime</span><span style="color: #008080;">;</span>
		fst<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		freespace<span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		blk <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span>blk_find<span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//处理新申请</span>
			join<span style="color: #008000;">&#40;</span>i,T,p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			Queue<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>QT<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
			Qcnt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Heapsize<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//处理剩余队列</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> q<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		t<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">endtime</span><span style="color: #008080;">;</span>
		freespace<span style="color: #008000;">&#40;</span>t<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	process<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn%dn&quot;</span>,Etime<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,Qcnt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">钉子和小球 </span></h2>
<p>有一个三角形木板,竖直立放，上面钉着n(n+1)/2颗钉子，还有(n+1)个格子（当n=5时如图1）。每颗钉子和周围的钉子的距离都等于d，每个格子的宽度也都等于d，且除了最左端和最右端的格子外每个格子都正对着最下面一排钉子的间隙。</p>
<p>让一个直径略小于d的小球中心正对着最上面的钉子在板上自由滚落，小球每碰到一个钉子都可能落向左边或右边（概率各1/2），且球的中心还会正对着下一颗将要碰上的钉子。例如图2就是小球一条可能的路径。</p>
<p>我们知道小球落在第i个格子中的概率pi= <a class="image" title="Image:Ball1.gif" href="http://www.ruvtex.cn/wiki/Image:Ball1.gif"><img longdesc="/wiki/Image:Ball1.gif" src="http://www.ruvtex.cn/mw/images/7/7f/Ball1.gif" alt="Image:Ball1.gif" width="132" height="39" /></a> ，其中i为格子的编号，从左至右依次为0,1,&#8230;,n。</p>
<p>现在的问题是计算拔掉某些钉子后，小球落在编号为m的格子中的概率pm。假定最下面一排钉子不会被拔掉。例如图3是某些钉子被拔掉后小球一条可能的路径。</p>
<p><a class="image" title="Image:Ball2.gif" href="http://www.ruvtex.cn/wiki/Image:Ball2.gif"><img longdesc="/wiki/Image:Ball2.gif" src="http://www.ruvtex.cn/mw/images/3/3e/Ball2.gif" alt="Image:Ball2.gif" width="421" height="132" /></a></p>
<p>输入</p>
<p>第1行为整数n（2&lt;=n&lt;=50）和m（0&lt;=m&lt;=n）。以下n行依次为木板上从上至下n行钉子的信息，每行中‘*’表示钉子还在，‘.’表示钉子被拔去，注意在这n行中空格符可能出现在任何位置。</p>
<p>输出</p>
<p>仅一行，是一个既约分数(0写成0/1)，为小球落在编号为m的格子中的概pm。既约分数的定义：A/B是既约分数，当且仅当A、B为正整数且A和B没有大于1的公因子。</p>
<p>样例输入</p>
<pre>5 2
    *
   * .
  * * *
 * . * *
* * * * *</pre>
<p>样例输出</p>
<pre>7/16</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">棋盘分割 </span></h2>
<p>将一个８×８的棋盘进行如下分割：将原棋盘割下一块矩形棋盘并使剩下部分也是矩形，再将剩下的部分继续如此分割，这样割了(n-1)次后，连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)</p>
<p><a class="image" title="Image:Chess.gif" href="http://www.ruvtex.cn/wiki/Image:Chess.gif"><img longdesc="/wiki/Image:Chess.gif" src="http://www.ruvtex.cn/mw/images/b/b4/Chess.gif" alt="Image:Chess.gif" width="344" height="150" /></a></p>
<p>允许的分割方案 不允许的分割方案</p>
<p>原棋盘上每一格有一个分值，一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘，并使各矩形棋盘总分的均方差最小。</p>
<p>均方差<a class="image" title="Image:Division-1.gif" href="http://www.ruvtex.cn/wiki/Image:Division-1.gif"><img longdesc="/wiki/Image:Division-1.gif" src="http://www.ruvtex.cn/mw/images/9/96/Division-1.gif" alt="Image:Division-1.gif" width="124" height="53" /></a>，其中平均值<a class="image" title="Image:Division-2.gif" href="http://www.ruvtex.cn/wiki/Image:Division-2.gif"><img longdesc="/wiki/Image:Division-2.gif" src="http://www.ruvtex.cn/mw/images/4/4e/Division-2.gif" alt="Image:Division-2.gif" width="74" height="48" /></a>xi为第i块矩形棋盘的分。 请编程对给出的棋盘及n，求出<a class="image" title="Image:Division-3.gif" href="http://www.ruvtex.cn/wiki/Image:Division-3.gif"><img longdesc="/wiki/Image:Division-3.gif" src="http://www.ruvtex.cn/mw/images/c/cb/Division-3.gif" alt="Image:Division-3.gif" width="13" height="15" /></a>的最小值。</p>
<p>输入</p>
<ul>
<li>第1行为一个整数n(1&lt;n&lt;15)。</li>
<li>第2行至第9行每行为8个小于100的非负整数，表示棋盘上相应格子的分值。每行相邻两数之间用一个空格分隔。</li>
</ul>
<p>输出</p>
<ul>
<li>仅一个数，为<a class="image" title="Image:Division-3.gif" href="http://www.ruvtex.cn/wiki/Image:Division-3.gif"><img longdesc="/wiki/Image:Division-3.gif" src="http://www.ruvtex.cn/mw/images/c/cb/Division-3.gif" alt="Image:Division-3.gif" width="13" height="15" /></a>（四舍五入精确到小数点后三位）。</li>
</ul>
<p>样例输入</p>
<pre>3
1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 3</pre>
<p>样例输出</p>
<pre>1.633</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">生日蛋糕 </span></h2>
<p>7月17日是Mr.W的生日，ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕，每层都是一个圆柱体。设从下往上数第i(1&lt;=i&amp; lt;=M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i&lt;M时，要求Ri&gt;Ri+1且Hi&gt;Hi+1。由于要在蛋糕上抹奶油，为尽可能节约经费，我们希望蛋糕外表面 （最下一层的下底面除外）的面积Q最小。</p>
<p>令Q= Sπ请编程对给出的N和M，找出蛋糕的制作方案（适当的Ri和Hi的值），使S最小。（除Q外，以上所有数据皆为正整数）</p>
<p>输入</p>
<p>有两行，第一行为N（N&lt;=10000），表示待制作的蛋糕的体积为Nπ；第二行为M(M&lt;=20)，表示蛋糕的层数为M。</p>
<p>输出</p>
<p>仅一行，是一个正整数S（若无解则S=0）。</p>
<p>样例输入</p>
<pre>100
2</pre>
<p>样例输出</p>
<pre>68</pre>
<p>附：圆柱公式</p>
<ul>
<li>体积V=πR2H</li>
<li>侧面积A’=2πRH</li>
<li>底面积A=πR2</li>
</ul>
</blockquote>
<blockquote>
<h2><span class="mw-headline">最优连通子集 </span></h2>
<p>众所周知，我们可以通过直角坐标系把平面上的任何一个点P用一个有序数对(x,y)来唯一表示，如果x,y都是整数，我们就把点P称为整点，否则点P称为非整点。我们把平面上所有整点构成的集合记为W。</p>
<p><strong>定义1</strong></p>
<ul>
<li>两个整点P1(x1,y1),P2(x2,y2)，若|x1-x2|+|y1-y2|=1，则称P1,P2相邻，记作P1~P2，否则称P1,P2不相邻。</li>
</ul>
<p><strong>定义2</strong></p>
<ul>
<li>设点集S是W的一个有限子集，即S={P1,P2,…,Pn}(n&gt;=1)，其中Pi(1&lt;=i&lt;=n)属于W，我们把S称为整点集。</li>
</ul>
<p><strong>定义3</strong></p>
<ul>
<li>设S是一个整点集，若点R,T属于S，且存在一个有限的点序列Q1,Q2,…,Qk满足:</li>
</ul>
<ol>
<li>
<ol>
<li>Qi属于S（1&lt;=i&lt;=k）;</li>
<li>Q1=R,Qk= T;</li>
<li>Qi~Qi+1(1&lt;=i&lt;=k-1)，即Qi与Qi+1相邻;</li>
<li>对于任何1&lt;=i&lt;j&lt;=k有Qi≠Qj;</li>
</ol>
</li>
</ol>
<ul>
<li>我们则称点R与点T在整点集S上连通，把点序列Q1,Q2,…,Qk称为整点集S中连接点R与点T的一条道路。</li>
</ul>
<p><strong>定义4</strong></p>
<ul>
<li>若整点集V满足：对于V中的任何两个整点，V中有且仅有一条连接这两点的道路，则V称为单整点集。</li>
</ul>
<p><strong>定义5</strong></p>
<ul>
<li>对于平面上的每一个整点，我们可以赋予它一个整数，作为该点的权，于是我们把一个整点集中所有点的权的总和称为该整点集的权和。</li>
</ul>
<p>我们希望对于给定的一个单整点集V，求出一个V的最优连通子集B，满足：</p>
<ol>
<li>B是V的子集</li>
<li>对于B中的任何两个整点，在B中连通；</li>
<li>B是满足条件(1)和(2)的所有整点集中权和最大的。</li>
</ol>
<p>输入</p>
<p>第1行是一个整数N，表示单整点集V中点的个数；</p>
<p>以下N行中，第i行(1&lt;=i&lt;=N)有三个整数，Xi,Yi,Ci依次表示第i个点的横坐标，纵坐标和权。同一行相邻两数之间用一个空格分隔。</p>
<p>输出</p>
<p>仅一个整数，表示所求最优连通集的权和。</p>
<p>样例输入</p>
<pre>5
0 0 -2
0 1 1
1 0 1
0 -1 1
-1 0 1</pre>
<p>样例输出</p>
<pre>2</pre>
<p>参数约定</p>
<ul>
<li>2&lt;=N&lt;=1000</li>
<li>-10^6&lt;=Xi,Yi&lt;=10^6</li>
<li>-100&lt;=Ci&lt;=100</li>
</ul>
</blockquote>
<blockquote>
<h2><span class="mw-headline">01串 </span></h2>
<p>给定7个整数N,A0,B0,L0,A1,B1,L1，要求设计一个01串S=s1s2…si…sN，满足：</p>
<ol>
<li>si=0或si=1，1&lt;=i&lt;=N；</li>
<li>对于S的任何连续的长度为L0的子串sjsj+1…sj+L0-1(1&lt;=j&lt;=N-L0+1)，0的个数大于等于A0且小于等于B0;</li>
<li>对于S的任何连续的长度为L1的子串sjsj+1…sj+L1-1(1&lt;=j&lt;=N-L1+1)，1的个数大于等于A1且小于等于B1;</li>
</ol>
<p>例如，N=6,A0=1,B0=2,L0=3,A1=1,B1=1,L1=2，则存在一个满足上述所有条件的01串S=010101。</p>
<p>输入</p>
<ul>
<li>仅一行，有7个整数，依次表示N,A0,B0,L0,A1,B1,L1（3&lt;=N&lt;=1000，1&lt;= A0&lt;=B0&lt;=L0&lt;=N，1&lt;=A1&lt;=B1&lt;=L1&lt;=N），相邻两个整数之间用一个空格分隔</li>
</ul>
<p>输出</p>
<ul>
<li>仅一行，若不存在满足所有条件的01串，则输出一个整数-1，否则输出一个满足所有条件的01串。</li>
</ul>
<p>样例输入</p>
<pre>6 1 2 3 1 1 2</pre>
<p>样例输出</p>
<pre>010101</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">内存分配 </span></h2>
<p>内存是计算机重要的资源之一，程序运行的过程中必须对内存进行分配。</p>
<p>经典的内存分配过程是这样进行的：</p>
<ol>
<li>内存以内存单元为基本单位，每个内存单元用一个固定的整数作为标识，称为地址。地址从0开始连续排列，地址相邻的内存单元被认为是逻辑上连续的。我们把从地址i开始的s个连续的内存单元称为首地址为i长度为s的地址片。</li>
<li>运行过程中有若干进程需要占用内存，对于每个进程有一个申请时刻T，需要内存单元数M及运行时间P。在运行时间P内（即T时刻开始，T+P时刻结束），这M个被占用的内存单元不能再被其他进程使用。</li>
<li>假设在T时刻有一个进程申请M个单元，且运行时间为P，则：
<ol>
<li>若T时刻内存中存在长度为M的空闲地址片，则系统将这M个空闲单元分配给该进程。若存在多个长度为M个空闲地址片，则系统将首地址最小的那个空闲地址片分配给该进程。</li>
<li>如果T时刻不存在长度为M的空闲地址片，则该进程被放入一个等待队列。对于处于等待队列队头的进程，只要在任一时刻，存在长度为M的空 闲地址片，系统马上将该进程取出队列，并为它分配内存单元。注意，在进行内存分配处理过程中，处于等待队列队头的进程的处理优先级最高，队列中的其它进程 不能先于队头进程被处理。</li>
</ol>
</li>
</ol>
<p>现在给出一系列描述进程的数据，请编写一程序模拟系统分配内存的过程。</p>
<p>输入</p>
<ul>
<li>第一行是一个数N，表示总内存单元数（即地址范围从0到N-1）</li>
<li>从第二行开始每行描述一个进程的三个整数T、M、P（M&lt;=N）。</li>
<li>数据已按T从小到大排序。</li>
<li>最后一行用三个0表示结束。</li>
<li>输入文件最多10000行，且所有数据都小于10^9。</li>
<li>输入文件中同一行相邻两项之间用一个或多个空格隔开。</li>
</ul>
<p>输出</p>
<ul>
<li>包括2行。</li>
<li>第一行是全部进程都运行完毕的时刻。</li>
<li>第二行是被放入过等待队列的进程总数。</li>
</ul>
<p>样例输入</p>
<pre>10
1 3 10
2 4 3
3 4 4
4 1 4
5 3 4
0 0 0</pre>
<p>样例输出</p>
<pre>12
2</pre>
<p>样例示例</p>
<table class="MsoNormalTable" style="background: white none repeat scroll 0% 0%; width: 501.7pt;" border="1" cellspacing="1" cellpadding="0" width="669">
<tbody>
<tr style="page-break-inside: avoid; height: 14.6pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 14.6pt;" rowspan="2" width="4%">
<p style="text-align: center;" align="center">时</p>
<p style="text-align: center;" align="center">刻</p>
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">T</span></p>
</td>
<td style="padding: 5.25pt; width: 41.24%; height: 14.6pt;" colspan="12" width="41%">
<p style="text-align: center;" align="center">内存占用情况</p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 14.6pt;" width="53%">
<p style="text-align: center;" align="center">进程事件</p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">0</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" colspan="2" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">1</span></p>
</td>
<td style="padding: 5.25pt; width: 4.8%; height: 13.5pt;" colspan="2" width="4%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">2</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">3</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">4</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">5</span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 13.5pt;" width="4%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">6</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">7</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">8</span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">9</span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" rowspan="2" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">A</span>申请空间（<span style="font-family: System;" lang="EN-US">M=3,P=10</span>）<span lang="EN-US">&lt;</span>成功<span lang="EN-US">&gt;</span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">1</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">2</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: black none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System; color: white;" lang="EN-US">B</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">B</span>申请空间（<span style="font-family: System;" lang="EN-US">M=4,P=3</span>）<span lang="EN-US">&lt;</span>成功<span lang="EN-US">&gt;</span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">3</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: black none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System; color: white;" lang="EN-US">B</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">C</span>申请空间（<span style="font-family: System;" lang="EN-US">M=4,P=4</span>）<span lang="EN-US">&lt;</span>失败进入等待队列<span lang="EN-US">&gt;</span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">4</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: black none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System; color: white;" lang="EN-US">B</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #cccccc none repeat scroll 0% 0%; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">D</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">D</span>申请空间（<span style="font-family: System;" lang="EN-US">M=1,P=4</span>）<span lang="EN-US">&lt;</span>成功<span lang="EN-US">&gt;</span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">5</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #e0e0e0 none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">C</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #cccccc none repeat scroll 0% 0%; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">D</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">B</span>结束，释放空间</p>
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">C</span>从等待队列取出，分配空间</p>
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">E</span>申请空间（<span style="font-family: System;" lang="EN-US">M=3,P=4</span>）<span lang="EN-US">&lt;</span>失败进入等待队列<span lang="EN-US">&gt;</span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">6</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #e0e0e0 none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">C</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #cccccc none repeat scroll 0% 0%; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">D</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">7</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #e0e0e0 none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">C</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #cccccc none repeat scroll 0% 0%; width: 3.58%; height: 13.5pt;" width="3%">
<p style="text-align: center;" align="center"><span style="font-family: System;" lang="EN-US">D</span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 13.5pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">8</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #e0e0e0 none repeat scroll 0% 0%; width: 15.92%; height: 13.5pt;" colspan="4" width="15%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">C</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #a6a6a6 none repeat scroll 0% 0%; width: 12.8%; height: 13.5pt;" colspan="3" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">E</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">D</span>结束，释放空间</p>
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">E</span>从等待队列取出，分配空间</p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">9</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; background: #a6a6a6 none repeat scroll 0% 0%; width: 12.8%; height: 13.5pt;" colspan="3" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">E</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">C</span>结束，释放空间</p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">10</span></strong></p>
</td>
<td style="padding: 5.25pt; background: #f3f3f3 none repeat scroll 0% 0%; width: 12.24%; height: 13.5pt;" colspan="5" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">A</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; background: #a6a6a6 none repeat scroll 0% 0%; width: 12.8%; height: 13.5pt;" colspan="3" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">E</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 13.5pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">11</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 5.42%; height: 13.5pt;" colspan="2" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.3%; height: 13.5pt;" colspan="2" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.24%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 13.5pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 13.5pt;" width="4%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; background: #a6a6a6 none repeat scroll 0% 0%; width: 12.8%; height: 13.5pt;" colspan="3" width="12%">
<p style="text-align: center;" align="center"><strong><span style="font-family: System;" lang="EN-US">E</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 13.5pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">A</span>结束，释放空间</p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 21.35pt;">
<td style="padding: 5.25pt; width: 4.78%; height: 21.35pt;" width="4%">
<p class="MsoNormal"><strong><span lang="EN-US">12</span></strong></p>
</td>
<td style="padding: 5.25pt; width: 5.42%; height: 21.35pt;" colspan="2" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.3%; height: 21.35pt;" colspan="2" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.24%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 4.74%; height: 21.35pt;" width="4%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 3.58%; height: 21.35pt;" width="3%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 5.34%; height: 21.35pt;" width="5%">
<p class="MsoNormal"><span lang="EN-US"> </span></p>
</td>
<td style="padding: 5.25pt; width: 53.42%; height: 21.35pt;" width="53%">
<p style="text-align: center;" align="center">进程<span style="font-family: System;" lang="EN-US">E</span>结束，释放空间</p>
</td>
</tr>
</tbody>
</table>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-1998-solution/" title="NOI 1998 解题报告">NOI 1998 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2001-solution/" title="NOI 2001 解题报告">NOI 2001 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2000-solution/" title="NOI 2000 解题报告">NOI 2000 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-map/" title="POI 1999 地图着色 Map">POI 1999 地图着色 Map</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-tro/" title="POI 1999 三色二叉树 Three−coloring of binary trees">POI 1999 三色二叉树 Three−coloring of binary trees</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-1999-solution/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>POI 1999 积水 Water</title>
		<link>http://www.byvoid.com/blog/poi-1999-wod/</link>
		<comments>http://www.byvoid.com/blog/poi-1999-wod/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 14:10:46 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[堆]]></category>
		<category><![CDATA[积水]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=675</guid>
		<description><![CDATA[根据木桶原理，水位的高低取决于最低的边界。我们可以从最低的边界入手，向内灌水，使水面于边界齐平。如果灌到了新的边界，而且不低于最低的边界，则这个点一定是不能被灌水的。 每... ]]></description>
			<content:encoded><![CDATA[<p>根据木桶原理，水位的高低取决于最低的边界。我们可以从最低的边界入手，向内灌水，使水面于边界齐平。如果灌到了新的边界，而且不低于最低的边界，则这个点一定是不能被灌水的。</p>
<p>每次取边界最小值向内灌水，于是可以用一个最小堆来维护高度。</p>
<p>算法流程如下：</p>
<ol>
<li>把所有的边界上的点加入堆，且标记为已使用过。</li>
<li>取出高度最小的点(x,y)，枚举与(x,y)相邻的未使用过的点(x&#8217;,y&#8217;)，从(x&#8217;,y&#8217;)开始Floodfill，边界高度h=(x,y)的高度。</li>
<li>重复第二步，直到堆为空。</li>
</ol>
<ul>
<li>Floodfill(x,y)</li>
</ul>
<ol>
<li>标记(x,y)为已使用过。</li>
<li>如果(x,y)的高度&gt;=h，则该点不能积水，加入堆并返回。</li>
<li>否则(x,y)的点的积水量为h-(x,y)的高度。</li>
<li>枚举与(x,y)相邻的未使用过的点(x&#8217;,y&#8217;)，Floodfill(x&#8217;,y&#8217;)。</li>
</ol>
<p><span id="more-675"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p675code14'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67514"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
</pre></td><td class="code" id="p675code14"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1999 wod
 * Author: Guo Jiabao
 * Time: 2008.12.16 21:44:50
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAX<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dx<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#125;</span>,dy<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">1</span>,<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x,y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,M,All<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Alt<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> vid<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> heap_size<span style="color: #008080;">;</span>
point Heap<span style="color: #008000;">&#91;</span>MAX<span style="color: #000040;">*</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> heap_ins<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #000040;">++</span>heap_size<span style="color: #008080;">;</span>Alt<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>Alt<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>i<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
		Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x<span style="color: #008080;">;</span> Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
point heap_delmin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point R<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,M<span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>heap_size<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i,c<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000080;">&lt;=</span>heap_size<span style="color: #008080;">;</span>i<span style="color: #000080;">=</span>c<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		c<span style="color: #000080;">=</span>i<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000040;">!</span><span style="color: #000080;">=</span>heap_size <span style="color: #000040;">&amp;&amp;</span> Alt<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>Alt<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			c<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Alt<span style="color: #008000;">&#91;</span>M.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>M.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> Alt<span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Heap<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>M<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> R<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;wod.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;wod.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>Alt<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Alt<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
	Heap<span style="color: #008000;">&#91;</span>heap_size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>Heap<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> inrange<span style="color: #008000;">&#40;</span>point A<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> A.<span style="color: #007788;">x</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">x</span><span style="color: #000080;">&lt;=</span>N <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y</span><span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> floodfill<span style="color: #008000;">&#40;</span>point A,<span style="color: #0000ff;">int</span> h<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point B<span style="color: #008080;">;</span>
	vid<span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Alt<span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;=</span>h<span style="color: #008000;">&#41;</span>
		heap_ins<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x</span>,A.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		All<span style="color: #000040;">+</span><span style="color: #000080;">=</span>h<span style="color: #000040;">-</span>Alt<span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			B.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> B.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">y</span><span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inrange<span style="color: #008000;">&#40;</span>B<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>vid<span style="color: #008000;">&#91;</span>B.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>B.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				floodfill<span style="color: #008000;">&#40;</span>B,h<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	point A,B<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		heap_ins<span style="color: #008000;">&#40;</span>i,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		heap_ins<span style="color: #008000;">&#40;</span>i,M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		vid<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>vid<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>M<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		heap_ins<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		heap_ins<span style="color: #008000;">&#40;</span>N,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		vid<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>vid<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>heap_size<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		A<span style="color: #000080;">=</span>heap_delmin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			B.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>dx<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> B.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">y</span><span style="color: #000040;">+</span>dy<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>inrange<span style="color: #008000;">&#40;</span>B<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>vid<span style="color: #008000;">&#91;</span>B.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>B.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				floodfill<span style="color: #008000;">&#40;</span>B,Alt<span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">x</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>A.<span style="color: #007788;">y</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,All<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">积水 </span></h2>
<p>问题描述</p>
<p>有这样一块土地，它可以被划分N*M个正方形小块，每块面积是一平方英寸，第i行第j列的小块可以表示成P(i,j)。这块土地高低不平，每一小块地P(i,j)都有自己的高度H(i,j)(单位是英寸)。</p>
<p>一场倾盆大雨后，由于这块地地势高低不同，许多低洼地方都积存了不少降水。假如你已经知道这块土地的详细信息，你能求出它最多能积存多少立方英寸的降水么?</p>
<p>输入格式</p>
<p>输入文件的第一行是两个正整数n和m,1&lt;=n&lt;=100,1&lt;=m&lt;=100,表示土地的尺寸。下面n行，每行m个整数(1..10000);第j行第i个数表示第j行第i列立方体的高。</p>
<p>输出格式</p>
<p>输出文件只有一个数，表示在这个建筑上可以聚合的积水的最大值</p>
<p>输入输出样例</p>
<p>输入</p>
<pre>3 6
3 3 4 4 4 2
3 1 3 2 1 4
7 3 1 6 4 1</pre>
<p>输出</p>
<pre>5</pre>
<p>下图是其方案：</p>
<p><a class="image" title="Image:Wod.png" href="http://www.ruvtex.cn/wiki/Image:Wod.png"><img longdesc="/wiki/Image:Wod.png" src="http://www.ruvtex.cn/mw/images/7/73/Wod.png" alt="Image:Wod.png" width="193" height="110" /></a></p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-2000-pro/" title="POI 2000 Promotion 促销活动">POI 2000 Promotion 促销活动</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-pie/" title="POI 1999 遗传密码 Primitivus">POI 1999 遗传密码 Primitivus</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-map/" title="POI 1999 地图着色 Map">POI 1999 地图着色 Map</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-tro/" title="POI 1999 三色二叉树 Three−coloring of binary trees">POI 1999 三色二叉树 Three−coloring of binary trees</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-bit/" title="POI 1999 位图 Bitmap">POI 1999 位图 Bitmap</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-gro/" title="POI 1999 洞穴探险 Speleology">POI 1999 洞穴探险 Speleology</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1999-wod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 1999 遗传密码 Primitivus</title>
		<link>http://www.byvoid.com/blog/poi-1999-pie/</link>
		<comments>http://www.byvoid.com/blog/poi-1999-pie/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 14:16:41 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[并查集]]></category>
		<category><![CDATA[欧拉回路]]></category>
		<category><![CDATA[连通分量]]></category>
		<category><![CDATA[遗传]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=671</guid>
		<description><![CDATA[把特征串看作图中的一条边，建立一个图。我们只需计算，至少增加的边数k，能使图中存在一个欧拉回路，则N+k就是结果。 一个有向图存在欧拉回路的充要条件是图中有且只有一个连通分支且... ]]></description>
			<content:encoded><![CDATA[<p>把特征串看作图中的一条边，建立一个图。我们只需计算，至少增加的边数k，能使图中存在一个欧拉回路，则N+k就是结果。</p>
<p>一个有向图存在欧拉回路的充要条件是图中有且只有一个连通分支且每一点的出度等于入度。假设图中只存在一个连通分支，则至少增加的边数k＝每个点出度入度之差的绝对值之和的二分之一。</p>
<p>如果图中存在多个连通分支，则对于每个连通分支，按一个连通分支的方法求其至少的加边数，再加上本来就存在欧拉回路的连通分支的个数，就是k的值。</p>
<p>求连通分量的方法可以用广搜或者并查集，时间复杂度为O(N)。<br />
<span id="more-671"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p671code16'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67116"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
</pre></td><td class="code" id="p671code16"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1999 pie
 * Author: Guo Jiabao
 * Time: 2008.12.15 22:00:54
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tUFS
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	tUFS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>MAXN<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> findroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span>a,t<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> r<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>t<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> Union<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>findroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">bool</span> Judge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">return</span> F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> getroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span>F<span style="color: #008000;">&#91;</span>findroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> M,PC,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> ind<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,oud<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> app<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,Q<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
tUFS U<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,a,b<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pie.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pie.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		oud<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span> ind<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		app<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>app<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>U.<span style="color: #007788;">Judge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			U.<span style="color: #007788;">Union</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,k,v<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>MAXN<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>app<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			k<span style="color: #000080;">=</span>U.<span style="color: #007788;">getroot</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				Q<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>PC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			v<span style="color: #000080;">=</span>ind<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>oud<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> v<span style="color: #000080;">=</span><span style="color: #000040;">-</span>v<span style="color: #008080;">;</span>
			A<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	Ans<span style="color: #000080;">=</span>M<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>PC<span style="color: #000080;">==</span><span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>Q<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			Ans<span style="color: #000040;">+</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>Q<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>PC<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>Q<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				Ans<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				Ans<span style="color: #000040;">+</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>Q<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">遗传密码</span></h2>
<p>问题描述</p>
<p>一个 primitivus 的 遗传密码 是一串自然数 K= ( a_1,&#8230;,a_n ) 。所有在 primitivus 的遗传密码中连续出现的数对 ( l , r ) 被称为一个 primitivus 的 特征 。例如存在一个 i ， l=a_i, r=a_i+1 。在 primitivus 的遗传密码中没有形如 ( p , p ) 的特征。 任务</p>
<p>写一个程序</p>
<ul>
<li>从输入文件中读入特征的列表</li>
<li>计算 primitivus 的遗传密码的最短长度</li>
<li>将结果写到输出文件</li>
</ul>
<p>输入格式</p>
<p>在输入文件的第一行有一个正整数 n ，表示 primitivus 的遗传密码的不同的特征。在接下来的 n 行中，每行有一对自然数 l 和 r ，用空格隔开， 1 &lt;= l &lt;= 1000, 1 &lt;= r &lt;= 1000 。数对 ( l , r ) 是 primitivus 的特征。特征不会在输入文件中重复出现。</p>
<p>输出格式</p>
<p>你的程序应当向输出文件输出一个数，表示包含输入文件中所有特征的最短的 primitivus 遗传密码的长度。</p>
<p>输入样例</p>
<pre>12
2 3
3 9
9 6
8 5
5 7
7 6
4 5
5 1
1 4
4 2
2 8
8 6</pre>
<p>输出样例</p>
<pre>15</pre>
<p>注释</p>
<p>下面的遗传密码包含了所有特征：</p>
<pre>(8, 5, 1, 4, 2, 3, 9, 6, 4, 5, 7, 6, 2, 8, 6)</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1998-pro/" title="POI 1998 相交的矩形 Rectangles">POI 1998 相交的矩形 Rectangles</a></li><li><a href="http://www.byvoid.com/blog/poi-1998-row/" title="POI 1998 单词等式 Word equations ">POI 1998 单词等式 Word equations </a></li><li><a href="http://www.byvoid.com/blog/poi-2001-spo/" title="POI 2001 Peaceful Commission 和平委员会">POI 2001 Peaceful Commission 和平委员会</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-wod/" title="POI 1999 积水 Water">POI 1999 积水 Water</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-map/" title="POI 1999 地图着色 Map">POI 1999 地图着色 Map</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-tro/" title="POI 1999 三色二叉树 Three−coloring of binary trees">POI 1999 三色二叉树 Three−coloring of binary trees</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1999-pie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POI 1999 地图着色 Map</title>
		<link>http://www.byvoid.com/blog/poi-1999-map/</link>
		<comments>http://www.byvoid.com/blog/poi-1999-map/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 13:04:43 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1999]]></category>
		<category><![CDATA[中位数]]></category>
		<category><![CDATA[中值]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[着色]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=667</guid>
		<description><![CDATA[这是一个动态规划的问题。对于题中给定的A(k)的定义，我们可以很容易发现累积误差最小的情况为取A(k)为这组数的中值（不是严格意义上的中位 数，是数列S[i]..S[j]中的S[(i+j+1)/2] /为整除）。... ]]></description>
			<content:encoded><![CDATA[<p>这是一个动态规划的问题。对于题中给定的A(k)的定义，我们可以很容易发现累积误差最小的情况为取A(k)为这组数的中值（不是严格意义上的中位 数，是数列S[i]..S[j]中的S[(i+j+1)/2] /为整除）。于是我们很容易想到要从小到大排序，然后以长度为阶段动态规划。</p>
<p>状态设定</p>
<ul>
<li>F[i,j] 表示前i个地区，然成j种颜色时最小的总误差。</li>
<li>P[i,j] 表示排序过后的序列中，第i位到第j位的最小误差。</li>
</ul>
<p>状态转移方程</p>
<ul>
<li>F[i,j]=Min{ F[k,j-1] + P[k+1,i] | 0&lt;=k&lt;=i-1 }</li>
</ul>
<p>边界条件</p>
<ul>
<li>F[i,j]=无穷大 (0&lt;=i&lt;=N , 0&lt;=j&lt;=M)</li>
<li>F[0,0]=0</li>
</ul>
<p>P[i,j]有定义式为</p>
<ul>
<li>P[i,j]=Sum{ Abs( S[k]-Mid(i,j) ) | i&lt;=k&lt;=j } (Mid(i,j)为S[i]..S[j]的中值)</li>
</ul>
<p>但是如果我们直接这样求，时间复杂度高达O(N^3 + N^2*M)，关键在于求P[i,j]时浪费了太多时间。其实我们可以递推求出P[i,j]。</p>
<p>递推式</p>
<ul>
<li>P[i,j]=P[i+1,j] + Mid(i,j) &#8211; S[i]</li>
</ul>
<p>边界</p>
<ul>
<li>P[i,i]=0</li>
</ul>
<p>这样，我们就可以在O(N^2*M)内解决。</p>
<p><span id="more-667"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p667code18'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p66718"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code" id="p667code18"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1999 map
 * Author: Guo Jiabao
 * Time: 2008.12.15 20:43:18
 * State: Solved 
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">3001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">11</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,M,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> S<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #000040;">-*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;map.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;map.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>S<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		P<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>S<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> P<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> P<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	Ans<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>M<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><h2><span class="mw-headline">地图着色</span></h2>
<p>在Byteland新的行政划分以后，制图工作室需要制作国家新的统计地图。因为技术上的原因，仅有很少的颜色能够被使用。地图上有着相同或者相似的人口（居民数）的地区被着为相同的颜色。对于给定的颜色K，让A（k）为数字，意思为：</p>
<ol>
<li>至少有一半颜色为k的地区人口不大于A（k）。</li>
<li>至少有一半颜色为k的地区人口不少于A（k）。</li>
</ol>
<p>地区的着色误差是指A（k）与地区人口之间的差额的绝对值，累积误差是指所有地区的着色误差之和。我们寻找一种地图的最佳着色方案（即最小的累积误差）</p>
<p>任务</p>
<p>写一个程序：</p>
<ol>
<li>从输入文件读取Byteland地区的人口，</li>
<li>计算最小的累积误差，</li>
<li>把结果写到文件中。</li>
</ol>
<p>输入</p>
<p>在输入文件的首行有一个整数n（10&lt; n &lt;3000），它是Byteland的地区数。第二行有数字m（2 &lt;= m &lt;= 10），表示用于着色的颜色数。在接下来的n行中的每一行里有一个非负的整数- Byteland一个地区的人口数。注：人口数不超过2^30。</p>
<p>输出</p>
<p>你的程序应该在输出文件单独的一行里写下一个整数—等于能够完成地图最佳着色的最小累积误差。</p>
<p>样例输入</p>
<pre>11
3
21
14
6
18
10
2
15
12
3
2
2</pre>
<p>样例输出</p>
<pre>15</pre>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1999-tro/" title="POI 1999 三色二叉树 Three−coloring of binary trees">POI 1999 三色二叉树 Three−coloring of binary trees</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-mus/" title="POI 1999 步兵问题 Musketeers">POI 1999 步兵问题 Musketeers</a></li><li><a href="http://www.byvoid.com/blog/noi-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-map/" title="POI 2001 Density Map 密度图">POI 2001 Density Map 密度图</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-wod/" title="POI 1999 积水 Water">POI 1999 积水 Water</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-pie/" title="POI 1999 遗传密码 Primitivus">POI 1999 遗传密码 Primitivus</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1999-map/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
