<?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>纳米的OI博客</title>
	<atom:link href="http://tech.hkrcn.com/feed" rel="self" type="application/rss+xml" />
	<link>http://tech.hkrcn.com</link>
	<description>贴代码用</description>
	<lastBuildDate>Tue, 22 Nov 2011 15:54:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>POJ 2411 Mondriaan’s Dream 新解</title>
		<link>http://tech.hkrcn.com/archives/46</link>
		<comments>http://tech.hkrcn.com/archives/46#comments</comments>
		<pubDate>Wed, 23 Feb 2011 17:00:00 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[PKU OJ]]></category>

		<guid isPermaLink="false">http://tech.hkrcn.com/archives/46</guid>
		<description><![CDATA[上次说的方法太落后了，这次为大家带来更常见的轮廓线的算法。 题目大意： 给定一个n行m列的网格，用1*2的方块覆盖，问有多少种覆盖方案。 解题报告： 我们以n=6，m=5为例。 首先，定义轮廓线： 这就是我们所说的轮廓线。上图的轮廓线，我们以(3, 3)表示。 有什么用呢？ 我们定义状态f(i, j, S)为，轮廓线(i, j)上一行格子状态为S（以下轮廓线直接代指这些格子），再往上的所有格子被覆盖情况下，可行的方案数。其中，S = {s1,s2,&#8230;,s_m}，s_k表示第k列的轮廓线的状态，1为被覆盖，0为未被覆盖。 在这里开始的示意图，灰色表示已经覆盖并且不在轮廓线上；红色表示轮廓线上被覆盖的格子；绿色表示轮廓线上不被覆盖的格子；黄色表示不需要考虑是否被覆盖的格子。 转移存在三种情况： 第一，用一个横着的方块覆盖： 必须从这样的轮廓线转移而来： 而不能出现这样的情况： 因为这是不合法的、不满足定义的（定义要求轮廓线以上全部被覆盖） 第二，用一个竖着的方块覆盖： 必须从这样的轮廓线转移而来： 而不能出现这样的情况： 因为这是不合法的，一个格子只能被覆盖一次。 第三，当前位置暂不覆盖： 必须从这样的轮廓线转移而来： 而不能出现这样的情况： 因为这是不合法的、不满足定义的（定义要求轮廓线以上全部被覆盖） 这里要分析一下方程怎么写，由于现在很困，所以下次补上 先贴代码： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [...]]]></description>
			<content:encoded><![CDATA[<p>上次说的方法太落后了，这次为大家带来更常见的轮廓线的算法。</p>
<p>题目大意：</p>
<p>给定一个n行m列的网格，用1*2的方块覆盖，问有多少种覆盖方案。</p>
<p>解题报告：</p>
<p>我们以n=6，m=5为例。</p>
<p>首先，定义轮廓线：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/1.png" alt="POJ_2411_1" /></p>
<p>这就是我们所说的轮廓线。上图的轮廓线，我们以(3, 3)表示。</p>
<p>有什么用呢？</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/2.png" alt="POJ_2411_2" /></p>
<p>我们定义状态f(i, j, S)为，轮廓线(i, j)上一行格子状态为S（以下轮廓线直接代指这些格子），再往上的所有格子被覆盖情况下，可行的方案数。其中，S = {s1,s2,&#8230;,s_m}，s_k表示第k列的轮廓线的状态，1为被覆盖，0为未被覆盖。</p>
<p>在这里开始的示意图，灰色表示已经覆盖并且不在轮廓线上；红色表示轮廓线上被覆盖的格子；绿色表示轮廓线上不被覆盖的格子；黄色表示不需要考虑是否被覆盖的格子。</p>
<p>转移存在三种情况：</p>
<p>第一，用一个横着的方块覆盖：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/3-0.png" alt="POJ_2411_3-0" /></p>
<p>必须从这样的轮廓线转移而来：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/3-1.png" alt="POJ_2411_3-1" /></p>
<p>而不能出现这样的情况：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/3-2.png" alt="POJ_2411_3-2" /></p>
<p>因为这是不合法的、不满足定义的（定义要求轮廓线以上全部被覆盖）</p>
<p>第二，用一个竖着的方块覆盖：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/4-0.png" alt="POJ_2411_4-0" /></p>
<p>必须从这样的轮廓线转移而来：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/4-1.png" alt="POJ_2411_4-1" /></p>
<p>而不能出现这样的情况：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/4-2.png" alt="POJ_2411_4-2" /></p>
<p>因为这是不合法的，一个格子只能被覆盖一次。</p>
<p>第三，当前位置暂不覆盖：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/5-0.png" alt="POJ_2411_5-0" /></p>
<p>必须从这样的轮廓线转移而来：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/5-1.png" alt="POJ_2411_5-1" /></p>
<p>而不能出现这样的情况：</p>
<p><img src="http://tech.hkrcn.com/wp-content/uploads/2011/02/5-2.png" alt="POJ_2411_5-2" /></p>
<p>因为这是不合法的、不满足定义的（定义要求轮廓线以上全部被覆盖）</p>
<p>这里要分析一下方程怎么写，由于现在很困，所以下次补上</p>
<p>先贴代码：</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;cstdio&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MaxS <span style="color: #000080;">=</span> <span style="color: #0000dd;">2048</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> solve<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> n, <span style="color: #0000ff;">int</span> m<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> f<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MaxS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> <span style="color: #000040;">*</span>f0 <span style="color: #000080;">=</span> f<span style="color: #008000;">&#91;</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;">3</span><span style="color: #008000;">&#93;</span>, <span style="color: #000040;">*</span>f1, <span style="color: #000040;">*</span>f2<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> maxs <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> m, tot, w0, w1<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</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> maxs<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>k<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		tot <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		f0<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>
		<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> m<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<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: #000040;">&amp;</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #000040;">++</span>tot<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>tot <span style="color: #000040;">&amp;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				f0<span style="color: #008000;">&#91;</span>k<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> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
				tot <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tot <span style="color: #000040;">&amp;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			f0<span style="color: #008000;">&#91;</span>k<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>
	<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> <span style="color: #000040;">++</span>i<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;">0</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> m<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			f0 <span style="color: #000080;">=</span> f<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">*</span> m <span style="color: #000040;">+</span> j<span style="color: #008000;">&#41;</span> <span style="color: #000040;">%</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			f1 <span style="color: #000080;">=</span> f<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">*</span> m <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;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			f2 <span style="color: #000080;">=</span> f<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">*</span> m <span style="color: #000040;">+</span> j <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">%</span> <span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			w0 <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> j<span style="color: #008080;">;</span>
			w1 <span style="color: #000080;">=</span> j <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span> <span style="color: #008080;">?</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>j <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: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</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> maxs<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>k<span style="color: #008000;">&#41;</span>
				f0<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> k <span style="color: #000040;">&amp;</span> w0 <span style="color: #008080;">?</span> <span style="color: #008000;">&#40;</span>f1<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">&amp;</span> ~w0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000040;">&amp;</span> w1 <span style="color: #008080;">?</span> f2<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">|</span> w0 <span style="color: #000040;">|</span> w1<span style="color: #008000;">&#93;</span> <span style="color: #008080;">:</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> f1<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">|</span> w0<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> f0<span style="color: #008000;">&#91;</span>maxs <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><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>
	<span style="color: #0000ff;">int</span> n, m<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</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>, n <span style="color: #000040;">&amp;&amp;</span> m<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%I64d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #008000;">&#40;</span>n <span style="color: #000040;">*</span> m <span style="color: #000040;">&amp;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #008080;">:</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000080;">&gt;</span> m <span style="color: #008080;">?</span> solve<span style="color: #008000;">&#40;</span>n, m<span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> solve<span style="color: #008000;">&#40;</span>m, n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/46/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>这是一篇测试</title>
		<link>http://tech.hkrcn.com/archives/34</link>
		<comments>http://tech.hkrcn.com/archives/34#comments</comments>
		<pubDate>Wed, 09 Feb 2011 08:08:34 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://tech.hkrcn.com/archives/34</guid>
		<description><![CDATA[aa bb cc dd]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td>aa</td>
<td>bb</td>
</tr>
<tr>
<td>cc</td>
<td>dd</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/34/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>World Final 1998 Flight Planning</title>
		<link>http://tech.hkrcn.com/archives/33</link>
		<comments>http://tech.hkrcn.com/archives/33#comments</comments>
		<pubDate>Thu, 02 Dec 2010 07:17:13 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/?p=34</guid>
		<description><![CDATA[题目大意： 飞机飞行高度在[20000,40000]，必须是1000的倍数。正常飞行高度是30000，每小时耗油量是2000。飞行高度与正常高度每相差1000，每小时就需要增加耗油量10。每爬升高度1000，需要耗油50。 现在要飞行n个区域，每个区域有给定的长度和高度20000时风速和高度40000时风速，风速和高度成线性关系。飞行速度是400+风速。求最小耗油量以及高度方案。 解题方法： 简单动态规划题，以区域和高度作为状态。 注意事项： 最后输出是整数，四舍五入吗？那你就悲剧了^^ 代码： 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 [...]]]></description>
			<content:encoded><![CDATA[<p>题目大意：<br />
飞机飞行高度在[20000,40000]，必须是1000的倍数。正常飞行高度是30000，每小时耗油量是2000。飞行高度与正常高度每相差1000，每小时就需要增加耗油量10。每爬升高度1000，需要耗油50。<br />
现在要飞行n个区域，每个区域有给定的长度和高度20000时风速和高度40000时风速，风速和高度成线性关系。飞行速度是400+风速。求最小耗油量以及高度方案。</p>
<p>解题方法：<br />
简单动态规划题，以区域和高度作为状态。</p>
<p>注意事项：<br />
最后输出是整数，四舍五入吗？那你就悲剧了^^</p>
<p>代码：</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> INF <span style="color: #000080;">=</span> <span style="color:#800080;">1e10</span><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;">101</span>, maxh <span style="color: #000080;">=</span> <span style="color: #0000dd;">21</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, len<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, speed<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, table<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>maxh<span style="color: #008000;">&#93;</span>, ans_project<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>maxh<span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</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&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><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> <span style="color: #000040;">++</span>i<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>len<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, <span style="color: #000040;">&amp;</span>speed<span style="color: #008000;">&#91;</span>i<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: #000040;">&amp;</span>speed<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: #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>
&nbsp;
<span style="color: #0000ff;">int</span> solve<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;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;=</span> n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<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;">0</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> maxh<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span>
			dp<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>
	dp<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;">1000</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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">double</span> unit <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>speed<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: #000040;">-</span> speed<span style="color: #008000;">&#91;</span>i<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: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #008000;">&#40;</span>maxh <span style="color: #000040;">-</span> <span style="color:#800080;">1.0</span><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> j <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> maxh<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">double</span> datum <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2000</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">abs</span><span style="color: #008000;">&#40;</span>j <span style="color: #000040;">-</span> <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>len<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">/</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">400</span> <span style="color: #000040;">+</span> speed<span style="color: #008000;">&#91;</span>i<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: #000040;">+</span> unit <span style="color: #000040;">*</span> j<span style="color: #008000;">&#41;</span><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> k <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> k <span style="color: #000080;">&lt;</span> maxh<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>k<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">double</span> tmp <span style="color: #000080;">=</span> dp<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>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> datum <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">&gt;</span> k <span style="color: #008080;">?</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000040;">-</span> k<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">50</span> <span style="color: #008080;">:</span> <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>tmp <span style="color: #000080;">&lt;</span> dp<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>
					dp<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> tmp<span style="color: #008080;">;</span>
					table<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> k<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: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> INF<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> maxh<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dp<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;">&lt;</span> answer<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			answer <span style="color: #000080;">=</span> dp<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: #008080;">;</span>
			ans_project<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</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> n <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;">0</span><span style="color: #008080;">;</span> <span style="color: #000040;">--</span>i<span style="color: #008000;">&#41;</span>
		ans_project<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> table<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>ans_project<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;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Flight %d: &quot;</span>, t<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> <span style="color: #000040;">++</span>i<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>, ans_project<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">20</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;%.0f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #0000dd;">ceil</span><span style="color: #008000;">&#40;</span>answer<span style="color: #008000;">&#41;</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>
&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>
	<span style="color: #0000ff;">int</span> testCases<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>testCases<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> t <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> t <span style="color: #000080;">&lt;=</span> testCases<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>t<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		input<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>
		output<span style="color: #008000;">&#40;</span>t<span style="color: #008000;">&#41;</span><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></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/33/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>World Final 1998 Crystal Clear</title>
		<link>http://tech.hkrcn.com/archives/32</link>
		<comments>http://tech.hkrcn.com/archives/32#comments</comments>
		<pubDate>Thu, 02 Dec 2010 05:41:45 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[World Final]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/?p=32</guid>
		<description><![CDATA[好久没更新了，继续更新吧。不过这次也该改目录名了，我也不是OIer了，要转型ACMer了。 题目大意： 以坐标系上每个整数坐标的点为圆心，直径为1建立圆。给定一个多边形，多边形上每条边的端点坐标都是整数。求被覆盖的圆的有效面积。 有效面积是这样定义的： 1. 如果整个圆都在多边形内，那么它的面积都是有效的； 2. 如果多边形的边穿过圆心，那么在多边形内的扇形面积是有效的。 解题方法： 因为坐标范围都很小，并且多边形的顶点都是整数，所以可以对于可能有效的圆，分别计算。对于每一个可能有效的圆： 1. 判断圆心是不是跟多边形某个顶点重合。如果是，累加扇形面积，结束；否则，转到2。 2. 判断圆心是否在某条边上。如果是，累加半圆面积，结束；否则，转到3. 3. 判断圆是否在多边形内。如果是，累加圆面积，结束。 圆在多边形内，当且仅当圆心离每一条边的距离不小于0.5，且圆心在多边形内。 几何知识（感谢gXX同学）： 以下用*表示叉积，@表示点积。 1. 叉积、点积、欧几里得距离。 2. 计算两向量夹角角度：利用余弦定理。 3. 点在线段上，点为p，线段端点p1、p2，v1、v2对应p到p1、p2的向量，下同：当且仅当v1 * v2 = 0，且v1 @ v2 < 0 4. 点到线段所在直线距离：d = &#124;v1 * v2&#124; / Distance(p1, p2) 5. 判断点在多边形内：射线法和转角法，参见《算法艺术与信息学竞赛》P381。代码用转角法实现。 注意事项： 用余弦定理和反三角函数只能算出锐角，但是扇形可能对应一个钝角。 1 2 3 4 5 6 7 8 9 [...]]]></description>
			<content:encoded><![CDATA[<p>好久没更新了，继续更新吧。不过这次也该改目录名了，我也不是OIer了，要转型ACMer了。</p>
<p>题目大意：<br />
以坐标系上每个整数坐标的点为圆心，直径为1建立圆。给定一个多边形，多边形上每条边的端点坐标都是整数。求被覆盖的圆的有效面积。<br />
有效面积是这样定义的：<br />
1. 如果整个圆都在多边形内，那么它的面积都是有效的；<br />
2. 如果多边形的边穿过圆心，那么在多边形内的扇形面积是有效的。</p>
<p>解题方法：<br />
因为坐标范围都很小，并且多边形的顶点都是整数，所以可以对于可能有效的圆，分别计算。对于每一个可能有效的圆：<br />
1. 判断圆心是不是跟多边形某个顶点重合。如果是，累加扇形面积，结束；否则，转到2。<br />
2. 判断圆心是否在某条边上。如果是，累加半圆面积，结束；否则，转到3.<br />
3. 判断圆是否在多边形内。如果是，累加圆面积，结束。<br />
圆在多边形内，当且仅当圆心离每一条边的距离不小于0.5，且圆心在多边形内。</p>
<p>几何知识（感谢gXX同学）：<br />
以下用*表示叉积，@表示点积。<br />
1. 叉积、点积、欧几里得距离。<br />
2. 计算两向量夹角角度：利用余弦定理。<br />
3. 点在线段上，点为p，线段端点p1、p2，v1、v2对应p到p1、p2的向量，下同：当且仅当v1 * v2 = 0，且v1 @ v2 < 0<br />
4. 点到线段所在直线距离：d = |v1 * v2| / Distance(p1, p2)<br />
5. 判断点在多边形内：射线法和转角法，参见《算法艺术与信息学竞赛》P381。代码用转角法实现。</p>
<p>注意事项：<br />
用余弦定理和反三角函数只能算出锐角，但是扇形可能对应一个钝角。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> pi <span style="color: #000080;">=</span> <span style="color:#800080;">3.1415926535897932384626433832795</span><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;">27</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n<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>
	POINT<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		x <span style="color: #000080;">=</span> y <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">bool</span> operator <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> POINT <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">const</span> POINT <span style="color: #000040;">*</span>that <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>value<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">!</span><span style="color: #000080;">=</span> that<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">||</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000040;">!</span><span style="color: #000080;">=</span> that<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	POINT operator <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> POINT <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">const</span> POINT <span style="color: #000040;">*</span>that <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>value<span style="color: #008080;">;</span>
		POINT result<span style="color: #008080;">;</span>
		result.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000040;">-</span> that<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008080;">;</span>
		result.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000040;">-</span> that<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> result<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span> px<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> input<span style="color: #008000;">&#40;</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&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><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> <span style="color: #000040;">++</span>i<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&quot;</span>, <span style="color: #000040;">&amp;</span>px<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>px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span><span style="color: #008000;">&#41;</span> n<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> min<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;">return</span> x <span style="color: #000080;">&lt;</span> y <span style="color: #008080;">?</span> x <span style="color: #008080;">:</span> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> max<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;">return</span> x <span style="color: #000080;">&gt;</span> y <span style="color: #008080;">?</span> x <span style="color: #008080;">:</span> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> CrossProduct<span style="color: #008000;">&#40;</span>POINT v1, POINT v2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> v1.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> v2.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> v2.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> v1.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> DotProduct<span style="color: #008000;">&#40;</span>POINT v1, POINT v2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> v1.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> v2.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> v1.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span> v2.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> Distance<span style="color: #008000;">&#40;</span>POINT p1, POINT p2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</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> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>p1.<span style="color: #007788;">x</span> <span style="color: #000040;">-</span> p2.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>p1.<span style="color: #007788;">x</span> <span style="color: #000040;">-</span> p2.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>p1.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> p2.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>p1.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> p2.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> Angle<span style="color: #008000;">&#40;</span>POINT p0, POINT p1, POINT p2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	POINT v0, v1, v2<span style="color: #008080;">;</span>
	v1 <span style="color: #000080;">=</span> p1 <span style="color: #000040;">-</span> p0<span style="color: #008080;">;</span>
	v2 <span style="color: #000080;">=</span> p2 <span style="color: #000040;">-</span> p0<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">acos</span><span style="color: #008000;">&#40;</span>DotProduct<span style="color: #008000;">&#40;</span>v1, v2<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #008000;">&#40;</span>Distance<span style="color: #008000;">&#40;</span>v0, v1<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> Distance<span style="color: #008000;">&#40;</span>v0, v2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</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> PointOnLine<span style="color: #008000;">&#40;</span>POINT p, POINT p1, POINT p2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	POINT v1, v2<span style="color: #008080;">;</span>
	v1 <span style="color: #000080;">=</span> p1 <span style="color: #000040;">-</span> p<span style="color: #008080;">;</span>
	v2 <span style="color: #000080;">=</span> p2 <span style="color: #000040;">-</span> p<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">!</span>CrossProduct<span style="color: #008000;">&#40;</span>v1, v2<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> DotProduct<span style="color: #008000;">&#40;</span>v1, v2<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</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;">double</span> PointToLineDistance<span style="color: #008000;">&#40;</span>POINT p, POINT p1, POINT p2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	POINT v1, v2<span style="color: #008080;">;</span>
	v1 <span style="color: #000080;">=</span> p1 <span style="color: #000040;">-</span> p<span style="color: #008080;">;</span>
	v2 <span style="color: #000080;">=</span> p2 <span style="color: #000040;">-</span> p<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>CrossProduct<span style="color: #008000;">&#40;</span>v1, v2<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> Distance<span style="color: #008000;">&#40;</span>p1, p2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</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> PointInPolygon<span style="color: #008000;">&#40;</span>POINT p, POINT px<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">// px[0] = px[n];</span>
	<span style="color: #0000ff;">double</span> AngleSum <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> cp <span style="color: #000080;">=</span> CrossProduct<span style="color: #008000;">&#40;</span>px<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> p, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cp <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			AngleSum <span style="color: #000040;">+</span><span style="color: #000080;">=</span> Angle<span style="color: #008000;">&#40;</span>p, px<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<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: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cp <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			AngleSum <span style="color: #000040;">-</span><span style="color: #000080;">=</span> Angle<span style="color: #008000;">&#40;</span>p, px<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<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: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>AngleSum<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> pi<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> result <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	POINT minp <span style="color: #000080;">=</span> px<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, maxp <span style="color: #000080;">=</span> px<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, p<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;">2</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;=</span> n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		minp.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> min<span style="color: #008000;">&#40;</span>minp.<span style="color: #007788;">x</span>, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		minp.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> min<span style="color: #008000;">&#40;</span>minp.<span style="color: #007788;">y</span>, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		maxp.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> max<span style="color: #008000;">&#40;</span>maxp.<span style="color: #007788;">x</span>, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		maxp.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> max<span style="color: #008000;">&#40;</span>maxp.<span style="color: #007788;">y</span>, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	px<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> px<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	px<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: #000080;">=</span> px<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> minp.<span style="color: #007788;">x</span><span style="color: #008080;">;</span> p.<span style="color: #007788;">x</span> <span style="color: #000080;">&lt;=</span> maxp.<span style="color: #007788;">x</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>p.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> minp.<span style="color: #007788;">y</span><span style="color: #008080;">;</span> p.<span style="color: #007788;">y</span> <span style="color: #000080;">&lt;=</span> maxp.<span style="color: #007788;">y</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>p.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">bool</span> processed <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>processed<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> k <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000080;">&lt;=</span> n <span style="color: #000040;">&amp;&amp;</span> px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> p<span style="color: #008000;">&#41;</span>
					<span style="color: #000040;">++</span>k<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000080;">&lt;=</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>CrossProduct<span style="color: #008000;">&#40;</span>px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> px<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<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> px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
						result <span style="color: #000040;">+</span><span style="color: #000080;">=</span> Angle<span style="color: #008000;">&#40;</span>px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>, px<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<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;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">else</span>
						result <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">*</span> pi <span style="color: #000040;">-</span> Angle<span style="color: #008000;">&#40;</span>px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>, px<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<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;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>
					processed <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: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>processed<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> k <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000080;">&lt;=</span> n <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>PointOnLine<span style="color: #008000;">&#40;</span>p, px<span style="color: #008000;">&#91;</span>k <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
					<span style="color: #000040;">++</span>k<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k <span style="color: #000080;">&lt;=</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
					result <span style="color: #000040;">+</span><span style="color: #000080;">=</span> pi <span style="color: #000040;">/</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>
					processed <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: #008000;">&#125;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>processed<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">bool</span> broken <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</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: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>broken<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
					broken <span style="color: #000080;">=</span> PointToLineDistance<span style="color: #008000;">&#40;</span>p, px<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, px<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> <span style="color:#800080;">0.5</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>broken <span style="color: #000040;">&amp;&amp;</span> PointInPolygon<span style="color: #008000;">&#40;</span>p, px, n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
					result <span style="color: #000040;">+</span><span style="color: #000080;">=</span> pi <span style="color: #000040;">/</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>
					processed <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: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> result<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>
	<span style="color: #0000ff;">int</span> Cases <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Shape %d<span style="color: #000099; font-weight: bold;">\n</span>insulating area = %.3f cm^2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #000040;">++</span>Cases, solve<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: #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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/32/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010网易编程挑战赛 技术分析</title>
		<link>http://tech.hkrcn.com/archives/31</link>
		<comments>http://tech.hkrcn.com/archives/31#comments</comments>
		<pubDate>Mon, 31 May 2010 00:48:31 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[有道难题]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/31</guid>
		<description><![CDATA[第一场： A:另类的异或 纯水题一道，N进制无进位加法。 B:有道搜索框 赤裸裸的Trie解决，首先把所有的单词添加道Trie树里面，然后进行dfs搜索，输出前8个满足前缀的。 C:最大和子序列 看到题目我首先考虑DP，然后没有什么直观思路，转而考虑贪心。WA了一次，JMH师兄：贪心显然是错的，提供一种解决方案： f1[i] 表示[1, i]的最大子序列和 f2[i] 表示[i, n]的最大子序列和 f3[i] 表示[1, i]的最小子序列和 f4[i] 表示[i, n]的最小子序列和 “然后你就会做了” 实践过程中，发现利用f3 f4计算跨n &#8211; 1的最大值的时候，会出现f3 f4覆盖掉所有的情况。具体怎么解决，我是分别判断f3、f4所对应区域的和是否等于f3、f4的值，如果等于不要。不知道这种方法是否完备。 第二场： A:有“道”难题 水题，不过我把数组开小了WA了一次。有两种解决方案： 1. 把字符串读入，转换，然后统计 2. 逐个字符读入，把当前字符和前一个字符拼在一起，用二进制检查，统计。 B:有道饭团 彻底的水题，就是统计下哪个数大而已。具体实现的问题就是对姓名的编号和排序，对姓名的编号提供3种解决方案： 1. 预读入，处理，然后再处理的时候二分查找 2. HASH 3. STL里面的map，我中途去学这个了 C:有道招聘 明显的DP。我发现我也几乎只会做这样的DP了。用f(i, j)表示第i个Leader最后一个录用的人为j。记p[i]为Leader i前一位应聘者的编号。显然，有pos[i] &#60;= j &#60;= pos[i+1]。我开始还搞错了，以为状态总数是O(n^2)，实际是O(n)。转移： f(i, j) = sum{ f(i-1, k) &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>第一场：</p>
<p>A:另类的异或<br />
纯水题一道，N进制无进位加法。</p>
<p>B:有道搜索框<br />
赤裸裸的Trie解决，首先把所有的单词添加道Trie树里面，然后进行dfs搜索，输出前8个满足前缀的。</p>
<p>C:最大和子序列<br />
看到题目我首先考虑DP，然后没有什么直观思路，转而考虑贪心。WA了一次，JMH师兄：贪心显然是错的，提供一种解决方案：</p>
<blockquote><p>f1[i] 表示[1, i]的最大子序列和<br />
f2[i] 表示[i, n]的最大子序列和<br />
f3[i] 表示[1, i]的最小子序列和<br />
f4[i] 表示[i, n]的最小子序列和<br />
“然后你就会做了”</p></blockquote>
<p>实践过程中，发现利用f3 f4计算跨n &#8211; 1的最大值的时候，会出现f3 f4覆盖掉所有的情况。具体怎么解决，我是分别判断f3、f4所对应区域的和是否等于f3、f4的值，如果等于不要。不知道这种方法是否完备。</p>
<p>第二场：</p>
<p>A:有“道”难题<br />
水题，不过我把数组开小了WA了一次。有两种解决方案：<br />
1. 把字符串读入，转换，然后统计<br />
2. 逐个字符读入，把当前字符和前一个字符拼在一起，用二进制检查，统计。</p>
<p>B:有道饭团<br />
彻底的水题，就是统计下哪个数大而已。具体实现的问题就是对姓名的编号和排序，对姓名的编号提供3种解决方案：<br />
1. 预读入，处理，然后再处理的时候二分查找<br />
2. HASH<br />
3. STL里面的map，我中途去学这个了</p>
<p>C:有道招聘<br />
明显的DP。我发现我也几乎只会做这样的DP了。用f(i, j)表示第i个Leader最后一个录用的人为j。记p[i]为Leader i前一位应聘者的编号。显然，有pos[i] &lt;= j &lt;= pos[i+1]。我开始还搞错了，以为状态总数是O(n^2)，实际是O(n)。转移：<br />
f(i, j) = sum{ f(i-1, k) | [k+1, j]的员工满足Leader i的需要 }，转移时间为O(nm)，总时间复杂度为O(n^2*m)<br />
对于每个(i, j)，决策范围k显然是连续的。并且对于每一个，记f(i, j)决策时最大的k为K(i, j)。对于每一个固定i，K(i, j)是关于j单调的。那么，转移可以优化，新的均摊时间复杂度为O(m)，所以总时间复杂度为O(nm)。</p>
<p>第三场：</p>
<p>A:选课的困惑<br />
Problem A终于不那么水了（其实是因为我WA了一次才那样说的 &#8211; -）。<br />
具体做法就是，每次挑选一个未选的选修科目，并且选中的科目，是所有可挑选的科目当中，使得平均分最大的。这样不断重复，直到平均分达到90分，或者所有科目都选择后仍然不能使得平均分达到90分。</p>
<p>B:X星球的身份证系统<br />
好像和以前做过某道题类似，我们以一个特定的数据分析：BCDEF<br />
由于需要回文，所以只有前三位的决策是有意义的，进行具体分析。<br />
1. 第1位：如果选择A，那么第2、3位都是可以随便选择的，总数为1*26^2。如果选择B，考虑第2点：<br />
2. 第2位：如果选择A、B，那么第3为是可以随便选择的，总数为2*26^1。如果选择C，考虑第3点：<br />
3. 第3位：如果选择A、B、C，那么总数为3*26^0。如果选择D，考虑第4点：<br />
4. 此时，1、2、3位都已经选定，我们只需要判断这个特定的回文是否超过了给定数据。没有超过就往总数上加1，超过就无视。这样就解决了。</p>
<p>C:火柴游戏<br />
这道题开始分析就往数学方面考虑。没有做出来，晚上很愤怒地把黑书带了回去看数论。结果早上回来，看到JMH师兄说了一句（我昨晚问过）：不就是DP么？<br />
然后还是还无思路，于是去翻竞赛系统的讨论区。终于翻到了一段话：</p>
<blockquote><p>用d[i,j]表示用了i根火柴棍后组成的数mod m的结果是j的数的个数<br />
状态转移过程是，在[0,10)内枚举k,则状态d[i,(j*10+k)%m]可以转移到状态d[i-stick[k]][j]。其中stick[k] 表示k这个数需要多少根火柴棍。</p></blockquote>
<p>然后好像明白了，实现之。不过又发现问题了，为什么(j*10+k)%m可以由j转移而来呢？然后突然想到昨晚黑书中看到的：</p>
<blockquote><p>如果a1≡a2(mod m)，b1≡b2(mod m)，那么a1+b1≡a2+b2(mod m)</p></blockquote>
<p>好了，这样就没问题了。具体还有就是状态储存问题，直接定义f[maxn][maxm]肯定要爆掉的。可以定义*f[maxn]，然后动态开new int [m]。那样就没问题了。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/31/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BOI 2007 The Sound of Silence</title>
		<link>http://tech.hkrcn.com/archives/30</link>
		<comments>http://tech.hkrcn.com/archives/30#comments</comments>
		<pubDate>Fri, 21 May 2010 13:49:01 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[国外竞赛]]></category>
		<category><![CDATA[POI]]></category>
		<category><![CDATA[单调优化]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/30</guid>
		<description><![CDATA[题目大意： 给定n个数，求出所有满足以下条件片段的起始位置：片段长度为M、片段内最大数和最小数的差小于给定的c。 解题报告： 这道题是《1D/1D动态规划优化初步》里面的例题，其实跟动态规划没啥关系，只是用到了一个单调队列优化。这个问题实质就是求每一个片段中最大值和最小值。因为求最小值和最大值本质是一样的，所以以最小值为例： 维护一个单调不下降的队列，每次遇到一个数，首先在队列头，若存在位置在这个数m个位置之前的元素，删掉。然后，在队列尾检查，若存在比该数大的元素，删掉。再在队列尾加入该数。这样，我们就得到了一个单调不下降序列。容易知道，队列头的元素就是以该数结尾的片段中最小的数字。 求出了每个片段中的最大值和最小值，问题就解决了。每个数只可能进、出一次队列，所以时间复杂度为O(n)。 我很恶心地使用了Class来实现这个代码。 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 [...]]]></description>
			<content:encoded><![CDATA[<p>题目大意：<br />
给定n个数，求出所有满足以下条件片段的起始位置：片段长度为M、片段内最大数和最小数的差小于给定的c。</p>
<p>解题报告：<br />
这道题是《1D/1D动态规划优化初步》里面的例题，其实跟动态规划没啥关系，只是用到了一个单调队列优化。这个问题实质就是求每一个片段中最大值和最小值。因为求最小值和最大值本质是一样的，所以以最小值为例：<br />
维护一个单调不下降的队列，每次遇到一个数，首先在队列头，若存在位置在这个数m个位置之前的元素，删掉。然后，在队列尾检查，若存在比该数大的元素，删掉。再在队列尾加入该数。这样，我们就得到了一个单调不下降序列。容易知道，队列头的元素就是以该数结尾的片段中最小的数字。<br />
求出了每个片段中的最大值和最小值，问题就解决了。每个数只可能进、出一次队列，所以时间复杂度为O(n)。</p>
<p>我很恶心地使用了Class来实现这个代码。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> IN_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;sound.in&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> OUT_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;sound.out&quot;</span><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;">1000005</span>, maxm <span style="color: #000080;">=</span> <span style="color: #0000dd;">10005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, m, c, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> Queue <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">int</span> num<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, pos<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, head, last<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		Queue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			head <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			last <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">bool</span> Empty<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> head <span style="color: #000080;">&gt;</span> last<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> GetFirstNum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> num<span style="color: #008000;">&#91;</span>head<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> GetFirstPos<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> pos<span style="color: #008000;">&#91;</span>head<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">int</span> GetLastNum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">return</span> num<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> DelFirst<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #000040;">++</span>head<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> DelLast<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> Insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> n, <span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			num<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>last<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
			pos<span style="color: #008000;">&#91;</span>last<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: #008000;">&#125;</span> qmin, qmax<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> answer<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fin <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>IN_FILE_NAME, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d%d%d&quot;</span>, <span style="color: #000040;">&amp;</span>n, <span style="color: #000040;">&amp;</span>m, <span style="color: #000040;">&amp;</span>c<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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d&quot;</span>, <span style="color: #000040;">&amp;</span>data<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;">fclose</span><span style="color: #008000;">&#40;</span>fin<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>
&nbsp;
<span style="color: #0000ff;">int</span> work<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> m<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>qmin.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmin.<span style="color: #007788;">GetLastNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			qmin.<span style="color: #007788;">DelLast</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		qmin.<span style="color: #007788;">Insert</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>qmax.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmax.<span style="color: #007788;">GetLastNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			qmax.<span style="color: #007788;">DelLast</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		qmax.<span style="color: #007788;">Insert</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, i<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><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> m, j <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> <span style="color: #000040;">++</span>i, <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>qmin.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmin.<span style="color: #007788;">GetFirstPos</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> j<span style="color: #008000;">&#41;</span>
			qmin.<span style="color: #007788;">DelFirst</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><span style="color: #000040;">!</span>qmin.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmin.<span style="color: #007788;">GetLastNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			qmin.<span style="color: #007788;">DelLast</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		qmin.<span style="color: #007788;">Insert</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>qmax.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmax.<span style="color: #007788;">GetFirstPos</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> j<span style="color: #008000;">&#41;</span>
			qmax.<span style="color: #007788;">DelFirst</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><span style="color: #000040;">!</span>qmax.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> qmax.<span style="color: #007788;">GetLastNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			qmax.<span style="color: #007788;">DelLast</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		qmax.<span style="color: #007788;">Insert</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		answer<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> qmax.<span style="color: #007788;">GetFirstNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> qmin.<span style="color: #007788;">GetFirstNum</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> c<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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fout <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>OUT_FILE_NAME, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> is_ok <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>answer<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>
			<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			is_ok <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;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>is_ok<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;NONE<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fout<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/30/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>APIO 2010 特别行动队 (commando)</title>
		<link>http://tech.hkrcn.com/archives/29</link>
		<comments>http://tech.hkrcn.com/archives/29#comments</comments>
		<pubDate>Wed, 19 May 2010 13:47:25 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[APIO]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[单调优化]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/29</guid>
		<description><![CDATA[解题报告： 解法一： 设f(x)为1 &#8211; x所得最大分数，c[x]为第x人分数，sum[x]为1-x总分。 有方程：f(x) = max{f(i) + w[i+1, x] &#124; 0 &#60;= i &#60; x}，其中w[i, j] = a*(sum[j] &#8211; sum[i-1])^2 + b*(sum[j] &#8211; sum[i-1]) + c。 首先证明w[i, j] + w[i+1, j+1] &#62;= w[i+1, j] + w[i, j+1]： (1) w[i, j+1] &#8211; w[i, j] =a*(sum[j] &#8211; sum[i-1] + c[j+1])^2 + b*(sum[j] &#8211; sum[i-1] + [...]]]></description>
			<content:encoded><![CDATA[<p>解题报告：<br />
解法一：<br />
设f(x)为1 &#8211; x所得最大分数，c[x]为第x人分数，sum[x]为1-x总分。<br />
有方程：f(x) = max{f(i) + w[i+1, x] | 0 &lt;= i &lt; x}，其中w[i, j] = a*(sum[j] &#8211; sum[i-1])^2 + b*(sum[j] &#8211; sum[i-1]) + c。</p>
<p>首先证明w[i, j] + w[i+1, j+1] &gt;= w[i+1, j] + w[i, j+1]：<br />
(1) w[i, j+1] &#8211; w[i, j]<br />
=a*(sum[j] &#8211; sum[i-1] + c[j+1])^2 + b*(sum[j] &#8211; sum[i-1] + c[j+1]) + c &#8211; a*(sum[j] &#8211; sum[i-1])^2 &#8211; b*(sum[j] &#8211; sum[i-1]) &#8211; c<br />
=a*(sum[j] &#8211; sum[i-1])^2 + a*c[j+1]^2 + 2*a*(sum[j] &#8211; sum[i-1])*c[j+1] + b*(sum[j] &#8211; sum[i-1]) + b*c[j+1] + c &#8211;  a*(sum[j] &#8211; sum[i-1])^2 &#8211; b*(sum[j] &#8211; sum[i-1]) &#8211; c<br />
=a*c[j+1]^2 +  b*c[j+1] + 2*a*(sum[j] &#8211; sum[i-1])*c[j+1]<br />
因为a*c[j+1]^2 +  b*c[j+1]为常量，sum[j] &#8211; sum[i-1]关于i单调递减，a&lt;0，c[j+1]&gt;0，所以上述结果关于i单调递增。<br />
(2) 同理，w[i, j] &#8211; w[i+1, j]关于j单调递减。<br />
综上，w[i, j] + w[i+1, j+1] &gt;= w[i+1, j] + w[i, j+1]。</p>
<p>时间复杂度O(n log2 n)，最后两个点本机（Intel Pentium E2140 1.6GHz）1.2s通过。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> IN_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;commando.in&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> OUT_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;commando.out&quot;</span><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;">1000005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, _a, _b, _c, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>, last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> a, b, c, sum<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fin <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>IN_FILE_NAME, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>, <span style="color: #000040;">&amp;</span>n, <span style="color: #000040;">&amp;</span>_a, <span style="color: #000040;">&amp;</span>_b, <span style="color: #000040;">&amp;</span>_c<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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d&quot;</span>, <span style="color: #000040;">&amp;</span>data<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;">fclose</span><span style="color: #008000;">&#40;</span>fin<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>
&nbsp;
<span style="color: #0000ff;">int</span> work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	sum<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: #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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> sum<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> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	a <span style="color: #000080;">=</span> _a, b <span style="color: #000080;">=</span> _b, c <span style="color: #000080;">=</span> _c<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>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> calc_dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> a <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> b <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_find<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> t0, <span style="color: #0000ff;">int</span> t1, <span style="color: #0000ff;">int</span> w0, <span style="color: #0000ff;">int</span> w1<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> left <span style="color: #000080;">=</span> w0, right <span style="color: #000080;">=</span> w1, res <span style="color: #000080;">=</span> w1 <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>left <span style="color: #000080;">&lt;=</span> right<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> mid <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>left <span style="color: #000040;">+</span> right<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>mid <span style="color: #000080;">&gt;</span> t0 <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;=</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			res <span style="color: #000080;">=</span> mid<span style="color: #008080;">;</span>
			right <span style="color: #000080;">=</span> mid <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: #008000;">&#123;</span>
			left <span style="color: #000080;">=</span> mid <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;">return</span> res<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> last <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	stack<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>
	stack<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;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	stack<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;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pw <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pw <span style="color: #000080;">&gt;</span> last<span style="color: #008000;">&#41;</span>
			pw <span style="color: #000080;">=</span> last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;</span> stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">++</span>pw<span style="color: #008080;">;</span>
		dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc_dp<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<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: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> i <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;=</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<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: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> w <span style="color: #000080;">=</span> work_find<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w <span style="color: #000080;">&lt;=</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> w <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #000040;">++</span>last<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> i<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> w<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fout <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>OUT_FILE_NAME, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;%lld<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, answer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fout<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>解法二：<br />
f(n) = max{f(i) + a*(sum[n] – sum[i])^2 + b*(sum[n] – sum[i]) + c | 0 &lt;= i &lt; x}<br />
= max{f(i) + a*sum[n]^2 + b*sum[i]^2 – 2*a*sum[n]*sum[i] + b*sum[n] – b*sum[i] + c | 0 &lt;= i &lt; x}<br />
= max{f(i) + b*sum[i]^2 – 2*a*sum[n]*sum[i] – b*sum[i] | 0 &lt;= i &lt; x} + a*sum[n]^2 + b*sum[n] + c<br />
不妨设a(i) = -2*a*sum[n], x(i) = sum[i], y(i) = f(i) + b*sum[i]^2 &#8211; b*sum[i]<br />
原式 = max{a(i)*x(i) + y(i) | 0 &lt;= i &lt; x} + a*sum[n]^2 + b*sum[n] + c x(i)是单调递减的，-a(i)也是单调递减的（考虑P = ax + y =&gt; y = -ax + P，最大化截距P）。显然，所有决策点都在凸包上。所以，维护一个栈，进行决策点储存。具体见论文《1D/1D动态规划优化初步》。<br />
时间复杂度为O(n)。最后两个数据点本机500ms通过。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> IN_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;commando.in&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> OUT_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;commando.out&quot;</span><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;">1000005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, _a, _b, _c, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> a, b, c, sum<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, stackp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fin <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>IN_FILE_NAME, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>, <span style="color: #000040;">&amp;</span>n, <span style="color: #000040;">&amp;</span>_a, <span style="color: #000040;">&amp;</span>_b, <span style="color: #000040;">&amp;</span>_c<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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d&quot;</span>, <span style="color: #000040;">&amp;</span>data<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;">fclose</span><span style="color: #008000;">&#40;</span>fin<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>
&nbsp;
<span style="color: #0000ff;">int</span> work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	sum<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: #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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> sum<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> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	a <span style="color: #000080;">=</span> _a, b <span style="color: #000080;">=</span> _b, c <span style="color: #000080;">=</span> _c<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>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> calc<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> a <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> b <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> t, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	stack<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>last<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
	stackp<span style="color: #008000;">&#91;</span>last<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> x<span style="color: #008080;">;</span>
	stackp<span style="color: #008000;">&#91;</span>last<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> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> insert_ok<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x2, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> y2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x0 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #000040;">-</span><span style="color: #0000dd;">1</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>, y0 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #000040;">-</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: #008080;">;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x1 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, y1 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<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: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000040;">-</span>x0<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>y2<span style="color: #000040;">-</span>y0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>x2<span style="color: #000040;">-</span>x0<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>y1<span style="color: #000040;">-</span>y0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	dp<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>
	dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	last <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, dp<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: #000040;">*</span>sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>b<span style="color: #000040;">*</span>sum<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>
	stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, dp<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: #000040;">*</span>sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>b<span style="color: #000040;">*</span>sum<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: #0000ff;">int</span> pw <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><span style="color: #0000ff;">int</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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		pw <span style="color: #000080;">=</span> pw <span style="color: #000080;">&lt;</span> last <span style="color: #008080;">?</span> pw <span style="color: #008080;">:</span> last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>pw <span style="color: #000080;">&lt;</span> last <span style="color: #000040;">&amp;&amp;</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;=</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">++</span>pw<span style="color: #008080;">;</span>
		dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><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;">&lt;</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>last <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>insert_ok<span style="color: #008000;">&#40;</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>a<span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>b<span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
			stack_insert<span style="color: #008000;">&#40;</span>i, sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>a<span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>b<span style="color: #000040;">*</span>sum<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: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fout <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>OUT_FILE_NAME, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;%lld<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, answer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fout<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/29/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>USACO Monthly March, 2008, Gold, Land Acquisition（土地购买）</title>
		<link>http://tech.hkrcn.com/archives/28</link>
		<comments>http://tech.hkrcn.com/archives/28#comments</comments>
		<pubDate>Wed, 19 May 2010 13:33:55 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[USACO]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[单调优化]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/28</guid>
		<description><![CDATA[解题报告： 首先，对所有的(x, y)（长、宽）排序。 然后，去除所有(x, y)，当且仅当存在(x&#8217;, y&#8217;)，使得x&#8217;&#62;=x &#38;&#38; y&#8217;&#62;=y。这一步在排序后可以在线性时间内完成。 设f(x)为购买1-x块土地所需最少的钱。x[i]、y[i]分别为第i块土地的长、宽。 有方程：f(x) = min{f(i) + w[i+1, x] &#124; 0 &#60;= i &#60; x}，其中，w[i, j] = x[i] * y[j]。 首先证明，w[i, j] + w[i+1, j+1] &#60;= w[i+1, j] + w[i, j+1]： (1) w[i, j+1] &#8211; w[i, j] =x[i] * y[j+1] &#8211; x[i] * y[j] =x[i] * (y[j+1]-y[j]) 因为x[i]关于i单调递增，y[j+1]-y[j] &#60; [...]]]></description>
			<content:encoded><![CDATA[<p>解题报告：<br />
首先，对所有的(x, y)（长、宽）排序。<br />
然后，去除所有(x, y)，当且仅当存在(x&#8217;, y&#8217;)，使得x&#8217;&gt;=x &amp;&amp; y&#8217;&gt;=y。这一步在排序后可以在线性时间内完成。<br />
设f(x)为购买1-x块土地所需最少的钱。x[i]、y[i]分别为第i块土地的长、宽。<br />
有方程：f(x) = min{f(i) + w[i+1, x] | 0 &lt;= i &lt; x}，其中，w[i, j] = x[i] * y[j]。<br />
首先证明，w[i, j] + w[i+1, j+1] &lt;= w[i+1, j] + w[i, j+1]：<br />
(1) w[i, j+1] &#8211; w[i, j]<br />
=x[i] * y[j+1] &#8211; x[i] * y[j]<br />
=x[i] * (y[j+1]-y[j])<br />
因为x[i]关于i单调递增，y[j+1]-y[j] &lt; 0，所以上述结果关于i单调递减。<br />
(2) w[i, j] &#8211; w[i+1,j]<br />
=x[i]*y[j] &#8211; x[i+1]*y[j]<br />
=y[j] * (x[i] &#8211; x[i+1])<br />
因为y[j]关于j单调递减，x[i] &#8211; x[i+1] &lt; 0，所以上述结果关于j单调递增。<br />
综上，w[i, j] + w[i+1, j+1] &lt;= w[i+1, j] + w[i, j+1]。<br />
解法一时间复杂度为O(n log2 n)。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> IN_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;acquire.in&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> OUT_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;acquire.out&quot;</span><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;">50005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>, last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fin <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>IN_FILE_NAME, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d%d&quot;</span>, <span style="color: #000040;">&amp;</span>data<span style="color: #008000;">&#91;</span>i<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: #000040;">&amp;</span>data<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: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fin<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>
&nbsp;
<span style="color: #0000ff;">int</span> comp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</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>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<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: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>y<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;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, n, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">1</span>, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> comp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> n0 <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>, maxy <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>data<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;">&gt;</span> maxy<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			maxy <span style="color: #000080;">=</span> data<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: #008080;">;</span>
			<span style="color: #000040;">++</span>n0<span style="color: #008080;">;</span>
			data<span style="color: #008000;">&#91;</span>n0<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> data<span style="color: #008000;">&#91;</span>i<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: #008080;">;</span>
			data<span style="color: #008000;">&#91;</span>n0<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> data<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: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	n <span style="color: #000080;">=</span> n0<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>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> calc_dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>data<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: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>data<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: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_find<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> t0, <span style="color: #0000ff;">int</span> t1, <span style="color: #0000ff;">int</span> w0, <span style="color: #0000ff;">int</span> w1<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> left <span style="color: #000080;">=</span> w0, right <span style="color: #000080;">=</span> w1, res <span style="color: #000080;">=</span> w1 <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>left <span style="color: #000080;">&lt;=</span> right<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> mid <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>left <span style="color: #000040;">+</span> right<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>mid <span style="color: #000080;">&gt;</span> t0 <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			res <span style="color: #000080;">=</span> mid<span style="color: #008080;">;</span>
			right <span style="color: #000080;">=</span> mid <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: #008000;">&#123;</span>
			left <span style="color: #000080;">=</span> mid <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;">return</span> res<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> last <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	stack<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>
	stack<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;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	stack<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;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pw <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pw <span style="color: #000080;">&gt;</span> last<span style="color: #008000;">&#41;</span>
			pw <span style="color: #000080;">=</span> last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;</span> stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">++</span>pw<span style="color: #008080;">;</span>
		dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc_dp<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<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: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<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;">&gt;</span> i <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<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: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> w <span style="color: #000080;">=</span> work_find<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w <span style="color: #000080;">&lt;=</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> w <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #000040;">++</span>last<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> i<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> w<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fout <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>OUT_FILE_NAME, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;%lld<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, answer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fout<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>解法二：<br />
f(n) = min{f(i) + W[i+1] * L[n] | 0 &lt;= i &lt; n}，W、L分别为第一、二关键字。<br />
设x(i) = f(i), b(i) = L[n], y(i) = W[i+1]，则：<br />
f(n) = min{x(i) + b(i) * y(i) | 0 &lt;= i &lt; n} x(i)是单调递增的，-1/b(i)也是单调递增的（考虑P=x + by =&gt; y = (-1/b)x + P/b，最小化截距P/b）。显然，决策点都在凸包上，所以，可以维护一个栈维护凸包，然后用一个指针进行决策。时间复杂度为O(n)。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> IN_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;acquire.in&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> OUT_FILE_NAME<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;acquire.out&quot;</span><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;">50005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, stackp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fin <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>IN_FILE_NAME, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fin, <span style="color: #FF0000;">&quot;%d%d&quot;</span>, <span style="color: #000040;">&amp;</span>data<span style="color: #008000;">&#91;</span>i<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: #000040;">&amp;</span>data<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: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fin<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>
&nbsp;
<span style="color: #0000ff;">int</span> comp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> y<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</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>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<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: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>y<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;&amp;</span> x<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>y<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;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>data<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, n, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000dd;">1</span>, <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> comp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> n0 <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><span style="color: #0000ff;">int</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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>data<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;">&gt;</span> data<span style="color: #008000;">&#91;</span>n0<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;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #000040;">++</span>n0<span style="color: #008080;">;</span>
			data<span style="color: #008000;">&#91;</span>n0<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> data<span style="color: #008000;">&#91;</span>i<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: #008080;">;</span>
			data<span style="color: #008000;">&#91;</span>n0<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> data<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: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	n <span style="color: #000080;">=</span> n0<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>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> calc<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>data<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: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span>data<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: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> t, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	stack<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>last<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
	stackp<span style="color: #008000;">&#91;</span>last<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> x<span style="color: #008080;">;</span>
	stackp<span style="color: #008000;">&#91;</span>last<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> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> insert_ok<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x2, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> y2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x0 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #000040;">-</span><span style="color: #0000dd;">1</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>, y0 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #000040;">-</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: #008080;">;</span>
	<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> x1 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, y1 <span style="color: #000080;">=</span> stackp<span style="color: #008000;">&#91;</span>last<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: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000040;">-</span>x0<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>y2<span style="color: #000040;">-</span>y0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>x2<span style="color: #000040;">-</span>x0<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>y1<span style="color: #000040;">-</span>y0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	dp<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>
	dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	last <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, data<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;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	stack_insert<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>, dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, data<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</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: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pw <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><span style="color: #0000ff;">int</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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		pw <span style="color: #000080;">=</span> pw <span style="color: #000080;">&lt;</span> last <span style="color: #008080;">?</span> pw <span style="color: #008080;">:</span> last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>pw <span style="color: #000080;">&lt;</span> last <span style="color: #000040;">&amp;&amp;</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">++</span>pw<span style="color: #008080;">;</span>
		dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><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;">&lt;</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>last <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>insert_ok<span style="color: #008000;">&#40;</span>dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, data<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><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
			stack_insert<span style="color: #008000;">&#40;</span>i, dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>, data<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><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: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fout <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span>OUT_FILE_NAME, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fout, <span style="color: #FF0000;">&quot;%lld<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, answer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fout<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/28/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HNOI 2008 玩具装箱</title>
		<link>http://tech.hkrcn.com/archives/27</link>
		<comments>http://tech.hkrcn.com/archives/27#comments</comments>
		<pubDate>Wed, 19 May 2010 13:19:26 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[各省省选]]></category>
		<category><![CDATA[HNOI]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[单调优化]]></category>
		<category><![CDATA[省选]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/27</guid>
		<description><![CDATA[解题报告： 设f(x)为把玩具1至玩具x装箱好的费用，c[x]为玩具x压缩后的长度，有方程： f(x) = min{f(i) + w[i+1, x] &#124; 0 &#60;= i &#60; x}，其中，w[i, j] = (j-i + sum{c[k] &#124; i &#60;= k &#60;= j} &#8211; L)^2。 首先证明，w[i, j] + w[i+1, j+1] &#60;= w[i+1, j] + w[i, j+1]： 假定j为常量, i为变量： w[i, j+1] &#8211; w[i, j] =(j+1-i + sum{c[k] &#124; i &#60;= k &#60;= j}+c[j+1] &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>解题报告：<br />
设f(x)为把玩具1至玩具x装箱好的费用，c[x]为玩具x压缩后的长度，有方程：<br />
f(x) = min{f(i) + w[i+1, x] | 0 &lt;= i &lt; x}，其中，w[i, j] = (j-i + sum{c[k] | i &lt;= k &lt;= j} &#8211; L)^2。<br />
首先证明，w[i, j] + w[i+1, j+1] &lt;= w[i+1, j] + w[i, j+1]：<br />
假定j为常量, i为变量：<br />
w[i, j+1] &#8211; w[i, j]<br />
=(j+1-i + sum{c[k] | i &lt;= k &lt;= j}+c[j+1] &#8211; L)^2 &#8211; (j-i + sum{c[k] | i &lt;= k &lt;= j} &#8211; L)^2<br />
=((j-i+sum{c[k] | i &lt;= k &lt;= j}-L) + (c[j+1]+1))^2 &#8211; (j-i+sum{c[k] | i &lt;= k &lt;= j}-L)^2<br />
=2(j-i+sum{c[k] | i &lt;= k &lt;= j}-L)(c[j+1]+1)+(c[j+1]+1)^2<br />
容易知道，上述结果关于i单调递减。<br />
同理，w[i, j] &#8211; w[i+1, j]关于j单调递增。<br />
所以，w满足w[i, j] + w[i+1, j+1] &lt;= w[i+1, j] + w[i, j+1]</p>
<p>注意，因为我没有数据，此代码并不确保AC。严格来说是一定不能AC的，因为我没有写高精度。</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> maxn <span style="color: #000080;">=</span> <span style="color: #0000dd;">50005</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> n, L, data<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>, last<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> sum<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, dp<span style="color: #008000;">&#91;</span>maxn<span style="color: #008000;">&#93;</span>, answer<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#40;</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>n, <span style="color: #000040;">&amp;</span>L<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> <span style="color: #000040;">++</span>i<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>data<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: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	sum<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: #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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
		sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> sum<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> data<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> calc_dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> j<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</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: #000040;">+</span> sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> L<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</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: #000040;">+</span> sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>sum<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> L<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_find<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> t0, <span style="color: #0000ff;">int</span> t1, <span style="color: #0000ff;">int</span> w0, <span style="color: #0000ff;">int</span> w1<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> left <span style="color: #000080;">=</span> w0, right <span style="color: #000080;">=</span> w1, res <span style="color: #000080;">=</span> w1 <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>left <span style="color: #000080;">&lt;=</span> right<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> mid <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>left <span style="color: #000040;">+</span> right<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>mid <span style="color: #000080;">&gt;</span> t0 <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> calc_dp<span style="color: #008000;">&#40;</span>mid, t1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			res <span style="color: #000080;">=</span> mid<span style="color: #008080;">;</span>
			right <span style="color: #000080;">=</span> mid <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: #008000;">&#123;</span>
			left <span style="color: #000080;">=</span> mid <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;">return</span> res<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	dp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> last <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	stack<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>
	stack<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;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	stack<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;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pw <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><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> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pw <span style="color: #000080;">&gt;</span> last<span style="color: #008000;">&#41;</span>
			pw <span style="color: #000080;">=</span> last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;</span> stack<span style="color: #008000;">&#91;</span>pw<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">++</span>pw<span style="color: #008080;">;</span>
		dp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> calc_dp<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>pw<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: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<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;">&gt;</span> i <span style="color: #000040;">&amp;&amp;</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, i<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> calc_dp<span style="color: #008000;">&#40;</span>stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<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: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #000040;">--</span>last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> w <span style="color: #000080;">=</span> work_find<span style="color: #008000;">&#40;</span>i, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>w <span style="color: #000080;">&lt;=</span> n<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> w <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			<span style="color: #000040;">++</span>last<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> i<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<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> w<span style="color: #008080;">;</span>
			stack<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> n<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	answer <span style="color: #000080;">=</span> dp<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</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>
&nbsp;
<span style="color: #0000ff;">int</span> output<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lld<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, answer<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>
&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>
	input<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	work_dp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	output<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>

]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/27/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1D/1D动态规划优化</title>
		<link>http://tech.hkrcn.com/archives/26</link>
		<comments>http://tech.hkrcn.com/archives/26#comments</comments>
		<pubDate>Wed, 19 May 2010 13:01:41 +0000</pubDate>
		<dc:creator>纳米</dc:creator>
				<category><![CDATA[知识讲解]]></category>

		<guid isPermaLink="false">http://www.hkrcn.com/oi/archives/26</guid>
		<description><![CDATA[具体请看论文《1D/1D动态规划初步》，本文只是链接和学习笔记。 2010-05-18，学习模型一。 2010-05-19，学习，分析玩具装箱（例题1, 湖南省选2008）、土地购买（例题2, USACO Monthly, March, 2008, Gold）、特别行动队（APIO2010），证明其w函数性质，Code，测试。]]></description>
			<content:encoded><![CDATA[<p>具体请看论文《1D/1D动态规划初步》，本文只是链接和学习笔记。</p>
<p>2010-05-18，学习模型一。</p>
<p>2010-05-19，学习，分析玩具装箱（例题1, 湖南省选2008）、土地购买（例题2, USACO Monthly, March, 2008, Gold）、特别行动队（APIO2010），证明其w函数性质，Code，测试。</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.hkrcn.com/archives/26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

