看不明白状态转移方程,请教

versaariel 2010-01-21 07:06:18
给你一个数字三角形, 形式如下:
  1
  2 3
  4 5 6
  7 8 9 10
  找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大.
  无论对与新手还是老手,这都是再熟悉不过的题了,很容易地,我们写出状态转移方程:f(i, j)=a[i, j] + min{f(i+1, j),f(i+1, j + 1)}

我们尝试从正面的思路去分析问题,如上例,不难得出一个非常简单的递归过程 :
  f1:=f(i-1,j+1); f2:=f(i-1,j);
  if f1>f2 then f:=f1+a[i,j] else f:=f2+a[i,j];

--------------------------------------------------------------
有没有人能详细解释下上面的转移方程是什么意思的,自己真的一点都不懂。。。。
...全文
490 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
versaariel 2010-01-22
  • 打赏
  • 举报
回复
好的,谢谢大家
x642458 2010-01-22
  • 打赏
  • 举报
回复
就是动态规划的书,《算法导论》吧,不知lz基础怎样?嘻嘻,不然看《算法分析》jon kleinberg写的,清华大学出版的
lzy18lzy 2010-01-22
  • 打赏
  • 举报
回复
要理解DP,先理解 子问题-> 子问题重叠 -> 最优解
versaariel 2010-01-22
  • 打赏
  • 举报
回复
谢谢,问下,我对这方面一点都不理解,有什么入门的书吗,一会结帖了
yymt168 2010-01-22
  • 打赏
  • 举报
回复
f(i, j)=a[i, j] + min{f(i+1, j),f(i+1, j + 1)}
这是一个用dp的简单经典ACM题目


   1
/ \
   2 3
/ \ / \
  4 5 6
/ \ / \ / \
 7 8 9 10

从底层往上走:
第1步
到4结点状态:4+min{7,8}=11
到5结点状态:5+min{8,9}=13
到6结点状态:6+min{9,10}=15
第2步
到2结点状态:2+min{11,13}=13
到3结点状态:3+min{13,15}=16
.
.
.
如此反复一直到顶端.

f(i,j)的状态(到达i最小值)只与它下层 f(i+1,j) f(i+1,j+1)的状态(到达i+1最小值)有关

所谓的状态转移,就是根据f(i+1,j) f(i+1,j+1)的状态转移到f(i,j)的状态

dp是以空间换时间的算法,保存了大量的中间结果..
罗耗子 2010-01-21
  • 打赏
  • 举报
回复
帮顶
x642458 2010-01-21
  • 打赏
  • 举报
回复
动态规划么
Dolphin_001 2010-01-21
  • 打赏
  • 举报
回复
楼主的i代表行,是从下往上增长的,而且从前一层到下一层的路径,只能往下面的同列和+1列的。
所以才有f1:=f(i-1,j+1); f2:=f(i-1,j);
猪肥膘 2010-01-21
  • 打赏
  • 举报
回复
帮顶

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧