<?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>潘锦的空间 &#187; 状态决策</title>
	<atom:link href="https://www.phppan.com/tag/%e7%8a%b6%e6%80%81%e5%86%b3%e7%ad%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>青蛙过河</title>
		<link>https://www.phppan.com/2009/08/frogger/</link>
		<comments>https://www.phppan.com/2009/08/frogger/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 15:34:52 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[DP]]></category>
		<category><![CDATA[dynamic programming]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[状态决策]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=9</guid>
		<description><![CDATA[【描述】 在河上有一座独木桥，一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子，青蛙很讨厌踩在这些石 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>【描述】<br />
在河上有一座独木桥，一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子，青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数，我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点：0，1，……，L（其中L是桥的长度）。坐标为0的点表示桥的起点，坐标为L的点表示桥的终点。青蛙从桥的起点开始，不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数（包括S,T）。当青蛙跳到或跳过坐标为L的点时，就算青蛙已经跳出了独木桥。</p>
<p>题目给出独木桥的长度L，青蛙跳跃的距离范围S,T，桥上石子的位置。你的任务是确定青蛙要想过河，最少需要踩到的石子数。</p>
<p>对于30%的数据，L &lt;= 10000；<br />
对于全部的数据，L &lt;= 10^9。</p>
<p>【输入格式 Input Format】<br />
输入的第一行有一个正整数L（1 &lt;= L &lt;= 10^9），表示独木桥的长度。第二行有三个正整数S，T，M，分别表示青蛙一次跳跃的最小距离，最大距离，及桥上石子的个数，其中1 &lt;= S &lt;= T &lt;= 10，1 &lt;= M &lt;= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置（数据保证桥的起点和终点处没有石子）。所有相邻的整数之间用一个空格隔开。</p>
<p>【输出格式 Output Format】</p>
<p>输出只包括一个整数，表示青蛙过河最少需要踩到的石子数。</p>
<p>【算法描述】<br />
转某牛人的解题报告！！！！<br />
这道题在没看数据规模之前以为是一道简单的DP，但是数据开到十亿，无论在时间还是空间复杂度都过大，所以就要进行优化了。</p>
<p>解一：</p>
<p>简单方法：预期得分30。简单动态规划，f[i]代表青蛙跳到i点时所可能踩到的最少石子数，所以有f[i]=min{f[k]+map[i]}(i-s≤k≤i-t)，其中map[i]代表i上是否有石子，有是1，否则0。算法复杂度O(n^2)。</p>
<p>解二：</p>
<p>改进方法：预期得分100。我们会发现，虽然桥很长，但上面最多只有100个石子，想到能否用石子DP，而应该是不行的。那能否基于第一种方法？由于石子排布非常的疏，我们还会发现，如果两个石子相隔甚远，那他们中间的f[i]大部分将会是同一个数，能否把两个石子的距离缩短，使之还与原来等效？要是行的话怎么缩？王乃岩同学考试时做了一个方法能够过全部数据，用的滚动数组存储，下面列出了他的程序。我自己也写了个程序，和他不尽相同：我令L=stone[i]-stone[i-1]（stone[i]代表按坐标由小到大顺序排列的石块坐标），当L能够被t整除时（L%t==0），令k=t；当L不能被t整除时（L%t!=0），令k=L%t。然后令k为k+t，最后判断如果k&gt;L，那么map[]数组中stone[i]和stone[i-1]两石头的距离就被等效成为L（也就是没变）；如果k&lt;=L，那么map[]数组中stone[i]和stone[i-1]两石头的距离就被等效成为k，可以看出来，这样处理完，两石子最大间距为2*t，大大的缩短了数组，再按解一进行DP，就可以通过了。</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
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
<span style="color: #993333;">long</span> stone<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">101</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> map<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">100001</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> f<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">100001</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">long</span> L<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> S<span style="color: #339933;">,</span> T<span style="color: #339933;">,</span> M<span style="color: #339933;">;</span> 
<span style="color: #993333;">void</span> quickSort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> l<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> r<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i <span style="color: #339933;">,</span> j<span style="color: #339933;">;</span>
	<span style="color: #993333;">long</span> temp<span style="color: #339933;">;</span>
	i <span style="color: #339933;">=</span> l<span style="color: #339933;">;</span>
	j <span style="color: #339933;">=</span> r<span style="color: #339933;">;</span>
	temp <span style="color: #339933;">=</span> stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> j<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> j <span style="color: #339933;">&amp;&amp;</span> stone<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> temp<span style="color: #009900;">&#41;</span>
			j<span style="color: #339933;">--;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> j<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> stone<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			i<span style="color: #339933;">++;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> j <span style="color: #339933;">&amp;&amp;</span> stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> temp<span style="color: #009900;">&#41;</span>                                                                        
			i<span style="color: #339933;">++;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> j<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			stone<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			j<span style="color: #339933;">--;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&gt;</span> l<span style="color: #009900;">&#41;</span> quickSort<span style="color: #009900;">&#40;</span>l<span style="color: #339933;">,</span> i <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;</span> r<span style="color: #009900;">&#41;</span> quickSort<span style="color: #009900;">&#40;</span>i <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> r<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">;</span>
	<span style="color: #993333;">long</span> l<span style="color: #339933;">,</span> k<span style="color: #339933;">,</span> p <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> min<span style="color: #339933;">;</span>
	<span style="color: #000066;">scanf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%ld%d%d%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>L<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>S<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>T<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>M<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> M<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000066;">scanf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%ld&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">memset</span><span style="color: #009900;">&#40;</span>map<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #0000dd;">100001</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">memset</span><span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #0000dd;">100001</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	quickSort<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> M<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	stone<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	p <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> M<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		l <span style="color: #339933;">=</span> stone<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> stone<span style="color: #009900;">&#91;</span>i <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>l <span style="color: #339933;">%</span> T <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> 
			k <span style="color: #339933;">=</span> T<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">else</span>
			k <span style="color: #339933;">=</span> l <span style="color: #339933;">%</span> T<span style="color: #339933;">;</span>
		k <span style="color: #339933;">=</span> k <span style="color: #339933;">+</span> T<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>l <span style="color: #339933;">&lt;</span> k<span style="color: #009900;">&#41;</span>
			k <span style="color: #339933;">=</span> l<span style="color: #339933;">;</span>
		p <span style="color: #339933;">=</span> p <span style="color: #339933;">+</span> k<span style="color: #339933;">;</span>
		map<span style="color: #009900;">&#91;</span>p<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> p <span style="color: #339933;">+</span> T<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		min <span style="color: #339933;">=</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> i <span style="color: #339933;">-</span> T<span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;=</span> i <span style="color: #339933;">-</span> S<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> j <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">&amp;&amp;</span> f<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> min<span style="color: #009900;">&#41;</span>
				min <span style="color: #339933;">=</span> f<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		f<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> min <span style="color: #339933;">+</span> map<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	min <span style="color: #339933;">=</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> p <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> p <span style="color: #339933;">+</span> T<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> min<span style="color: #009900;">&#41;</span>
			min <span style="color: #339933;">=</span> f<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> min<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2009/08/frogger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
