关于一定有多少种这类题目该咋整?

tanwan 2009-07-18 01:40:34
比如说题目有这样如,青蛙可以一次跳一步二步三步,它不喜欢碰石子,石子在某几点上(会列出N点有石子)问要怎么以碰到最少的石子为代价家对岸;
还有这样的题,台阶一次可走一步二步三步(中间会列出损坏的阶梯哪个阶),问到楼上可以有多少种走法?
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liao05050075 2009-07-22
  • 打赏
  • 举报
回复
这种题目一看就是DP
tanwan 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ToBeTough 的回复:]
第一题,怎么才算碰到石头?是经过石头也可以过咯?就算碰到一回石头?
[/Quote]
经过不算,比如你跳前面1和2和3都有石头你跳到3上就算碰到石头
showjim 2009-07-18
  • 打赏
  • 举报
回复
1.可以用贪婪法
2.计算复杂度与损坏的阶梯段数有关,可以用动态规划
ToBeTough 2009-07-18
  • 打赏
  • 举报
回复
第一题,怎么才算碰到石头?是经过石头也可以过咯?就算碰到一回石头?
绿色夹克衫 2009-07-18
  • 打赏
  • 举报
回复
第一题应该是比较典型的动态规划,从头向尾或从尾向头推都可以,先算出第1个点,再算出第2个点......

if(n <= 0)
return 0;

if(该点有石头)
point[n] = min(point[n-3],point[n-2],point[n-1]) + 1;
else
point[n] = min(point[n-3],point[n-2],point[n-1]);

第2题也类似,可以用递推

if(该点是好的)
point[n] = point[n-3] + point[n-2] + point[n-1];
arong1234 2009-07-18
  • 打赏
  • 举报
回复
要点是只关心下一跳
假定你在位置n,那么下一跳的可能性只有三种,然后对于三种跳法,你的位置又到了位置n1,n2,n3,然后再以n1,n2,n3分别为起点分析
那么按照这个想法,你可以建立一个三叉树,最终就变成一个树的遍历问题
acdbxzyw 2009-07-18
  • 打赏
  • 举报
回复
动态规划。

33,028

社区成员

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

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