P1135题解

1|0思路

我写的好像是动规的做法。

fi,j 表示第 ij 个点是否可以走到,值要么为 1,要么为 0。最多走 n 步,因为总共只有 n 个点,每一步都肯定会多延伸出一个点,要不然就重复计算。

不难得出转移公式:

fi+1,j+kj=fi,j
fi+1,jkj=fi,j

解释一下,因为只能从后往前,不然如果从当前往上一步就有需要一层循环。

注意:

  • 第一个转移执行前提是 j+kjn
  • 第二个转移执行前提是 1jkj,如果不判断就会数组越界。

2|0AC CODE

#include<bits/stdc++.h> using namespace std; int f[205][205],n,a,b,k[205]; int main(){ cin>>n>>a>>b; for(int i=1;i<=n;i++)cin>>k[i]; f[0][a]=1; for(int i=0;i<n;i++){ for(int j=1;j<=n;j++){ if(f[i][j]==0)continue; if(j+k[j]<=n){f[i+1][j+k[j]]=f[i][j];} if(j-k[j]>=1)f[i+1][j-k[j]]=f[i][j]; } } for(int i=0;i<=n;i++){ if(f[i][b]){ cout<<i; return 0; } } cout<<-1; return 0; }

__EOF__

本文作者xdh2012
本文链接https://www.cnblogs.com/xdh2012/p/17854965.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xu_dh  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示