Gravatar
金牌教师王艳芳
积分:201
提交:81 / 447
既然超过 \(S \cdot T\) 的空地不会改变青蛙的“记忆模式”,我们就可以把任意长的空地**缩短成 \(S \cdot T\)**,而不影响最终答案。
例如,若石子在 100 和 10000 处,中间 9900 格全是空的,我们只需保留 90 格(因 \(S,T \leq 10\),取 \(10 \times 9 = 90\))。压缩后,DP 状态空间大小从 \(L\)(可能 10⁹)降到约 \(100 \times 90 = 9000\),计算可行。**这个 \(S \cdot T\) 就是保证状态“线性无关组已完备”的临界长度**。

题目 111 [NOIP 2005]过河
2025-10-23 22:55:12
Gravatar
金牌教师王艳芳
积分:201
提交:81 / 447
假设两块石子之间全是空地,距离为 \(d\)。青蛙能跳 \(S, S+1, \dots, T\) 格。数学上可以证明:只要 \(d > S \cdot T\),青蛙就能通过不同跳法,**落到这段空地之后的任意“相对位置”**(比如刚好对齐某个余数)。
这是因为步长集合能“生成”所有足够大的数(因 \(\gcd=1\)),而 \(S \cdot T\) 是最坏情况下需要的最小长度(来自 Frobenius 问题)。此时,状态向量 \(\mathbf{v}_x\) 已经遍历了所有可能的组合,**新增的空地不会带来新信息**——就像背完乘法表后,再背也是重复。

题目 111 [NOIP 2005]过河
2025-10-23 22:54:58
Gravatar
金牌教师王艳芳
积分:201
提交:81 / 447
青蛙跳到位置 \(x\) 时,最少踩多少石子,只和它**前 \(T\) 步**的情况有关(因为最多跳 \(T\) 格)。我们可以把这 \(T\) 个值写成一个“状态向量”:
\[
\mathbf{v}_x = \begin{bmatrix} f(x-T+1) \\ f(x-T+2) \\ \vdots \\ f(x) \end{bmatrix}
\]
这个向量就像青蛙的“记忆”,长度固定为 \(T\)。所以,不管桥多长,所有可能的“记忆”最多只有 \(T\) 个独立方向——这叫**状态空间维度不超过 \(T\)**。一旦走过一段很长的空地,这些“记忆”就会开始重复。

题目 111 [NOIP 2005]过河
2025-10-23 22:54:43
Gravatar
金牌教师王艳芳
积分:201
提交:81 / 447
以下内容是根据陈老师讲的后增加的自我总结的内容

题目 111 [NOIP 2005]过河
2025-10-23 22:54:33
Gravatar
冷月星云
积分:306
提交:104 / 368
500分留念
感谢小青蛙给一个机会
题解已发布

Gravatar
雾茗
积分:1685
提交:496 / 1149
小凯的疑惑
当s=9,t=10;
互质;
最小不可拼出的为s*t-s-t;
即71;

Gravatar
Moon_
积分:247
提交:108 / 303
2520压缩法。。

Gravatar
Fisher.
积分:933
提交:301 / 521
我傻。

Gravatar
JustWB
积分:619
提交:222 / 519
第一发状态压缩动态规划

Gravatar
皓芷
积分:709
提交:106 / 264
我只说,小心压缩两个石头到同一位置。。。

Gravatar
Sky_miner
积分:2788
提交:902 / 1646
去年全校大扫除是高一做的,所以今年的全校大扫除应该高二做了,你们也不用觉得不公平,明年就轮到高三做了

Gravatar
楚修
积分:19
提交:6 / 31
#include<iostream>
using namespace std;
int main()/*阶段是每走一步,状态是起点到该坐标点最小石子数,
决策是s-t走几步 状态转移方程是f(i)=min{f(i-k)+d【i】)}s《k《t无论怎么说
都要跳到i那里 直接跳到i那里的石子数是看 i那里有木有 而中间不仅要看i还要考虑
所以肯定 是直接跳到那里为最优决策;
*/
{int d[10000000],stone[101],f[100000000],l,s,t,m;
cin>>l>>s>>t>>m;
for (int j=1;j<=m;j++)
cin>>stone[i];
}

题目 111 [NOIP 2005]过河
2016-09-29 21:09:58
Gravatar
Hzoi_Yniverse
积分:1185
提交:610 / 1385

Gravatar
_Itachi
积分:4321
提交:1498 / 3922
三点注意:
1、可能输入的石子位置是乱序,应先排序(只是可能,体现程序鲁棒性)。
2、要压缩长度,压缩到t*(t-1)。
3、注意循环越界(&&v>=j)。

Gravatar
SOBER GOOD BOY
积分:2019
提交:588 / 930
回复 @安呐。 :
//////////////////////////////////////////////////////////////////////////////////

题目 111 [NOIP 2005]过河
2016-03-25 10:57:55
Gravatar
LOSER
积分:1578
提交:567 / 1832

Gravatar
安呐一条小咸鱼。
积分:1941
提交:751 / 1825
提交了14次
① 前10次都有E,今天调的时候发现,我竟然在压缩前就标记了那个石头,10^9的数组不崩就怪了。②memset坐标数组多了一个地方,把计算完的又成0x7fffffff了
这弱智的错误╮(╯▽╰)╭,果然是蒟蒻。

题目 111 [NOIP 2005]过河
2016-03-23 09:12:38
Gravatar
安呐一条小咸鱼。
积分:1941
提交:751 / 1825
数据三把机房电脑干崩了= = 一定是我的程序有问题。

题目 111 [NOIP 2005]过河
2016-03-23 08:30:01
Gravatar
哒哒哒哒哒!
积分:3346
提交:1118 / 2737
压缩的最优值 max=s*[(s-1)/(t-s)](向上取整)

题目 111 [NOIP 2005]过河
2016-03-20 15:32:05
Gravatar
rvalue
积分:715
提交:213 / 573
回复 @=_= :
命名空间大法好

题目 111 [NOIP 2005]过河
2016-03-19 13:36:17