过河问题的小疑问

youla2 2020-01-24 12:31:38

假如采取下面的状态方程(状态全部初始化为0x3f)
for(int i=s;i<=L+t;i++)//第一次至少也会跳到s
for(int j=s;j<=t;j++)
if(i>=j)
f[i]=min(f[i],f[i-j]+a[i]);
那么当s=7,t=9时,青蛙在前面能到达的位置有 0,7,8,9 ,14 ,15,16,17,18 。。。。
在此假设7,8,9上有石头,其他地方都没有
那么根据这种算法f[17]=f[17-7]+0=f[10]+0=0,然而10的位置实际上是跳不到的
请问能说明这个状态方程是错的吗?
...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
youla2 2020-01-28
  • 打赏
  • 举报
回复
引用 5 楼 初学小菜 的回复:
方便发一下题目链接哪,我试试我的想法是否正确
visoj
一星伴月 2020-01-28
  • 打赏
  • 举报
回复
方便发一下题目链接哪,我试试我的想法是否正确
GKatHere 2020-01-24
  • 打赏
  • 举报
回复
不需要状态方程。 我简述一下我的想法,就不写代码了。 1: 分而治之。对于任一一个石子位置,存在两种状态, a, 踩中:对于踩中,终点位置就是石子位置。 b, 不踩中:对于不踩中,终点位置就是 石子位置+1 ------ 石子位置+T-1; T为跳跃的最大距离。 对于第一个石子,起点位置就是0, 对于第二个石子,起点位置就是第一个石子的终点位置,以此类推。 因为第一个石子有几个终点位置,那么第二个石子就有几个起点位置,以此类推,分而治之,遍历获取踩中石子最少的方法。 遍历时如果采用暴力遍历计算量最大为10^100次;如果采用贪心算法,只管当前石子不踩中,那么计算量为1次;如果采用beam前推法,即如果当前石必命中,则调整前面石子的终点位置再次检测,如果还是命中,则调整前面的前面的石子,以此类推,计算量根据beam大小而定。 .....如上,问题简化为 能否从起点位置通过跳跃到达终点位置。 2: 跳跃组合。检测能否从起点到达终点。 每次跳跃距离为 s- t, 那么第一次跳跃位置为 s-t的任意一点,那么第二次跳跃位置为 2s-2t的任务一点, 以此类推,第n次跳跃距离为 ns - nt的任意一点。 假设起点到终点距离为d, d/t = m, 如果m刚好为整数,那么能达到,不然的话,检测d是否在(m+1) *s - (m+1)*t之间,如果是,能达到,如果不是,不能达到。 当然,其中细节注意的就不说了。
youla2 2020-01-24
  • 打赏
  • 举报
回复
引用 2 楼 GKatHere 的回复:
使用这样的状态方程呀? 0<L<10^9,内存不够吧?
这个问题可以用状态压缩解决,问题是这个状态方程能解决前面的几十个位置吗
GKatHere 2020-01-24
  • 打赏
  • 举报
回复
使用这样的状态方程呀? 0<L<10^9,内存不够吧?
youla2 2020-01-24
  • 打赏
  • 举报
回复
自顶zsbd
Ch01:俄罗斯方块游戏的实现 安装JDK,并正确配置环境变量(如果有疑问,可以参考任何一本java入门书籍)。打开Eclipse(可以到http://www.eclipse.org/现在官方最新版,Eclipse本身是免费软件),导入ch01下的java项目,然后保存、运行game.ErsBlocksGame类即可。 Ch02:俄罗斯方块双人对战的实现 安装JDK,并配置环境变量,打开Eclipse,导入java项目ch02,然后保存、运行game.ErsBlocksGame 类即可。 Ch03:五子棋对战游戏的实现 安装JDK、配置环境变量,打开Eclipse导入ch03项目,运行server.chessServer类启动服务器端,运行client.chessClient类启动客户端。目前只支持两个客户端进行网络对战,多个玩家还有如线程同步问题等。两个客户端可以在同一台电脑上运行。 Ch04:多媒体展示系统 –网络游鱼 安装JDK、配置环境变量,打开Eclipse导入ch04项目,运行server.FishServer类启动服务器端,运行java client.SwimFish类启动客户端。注意,同时在多台机上运行客户端才能显示出网络游鱼的效果,在同一台机上打开多个客户端窗口不能看到该效果。 Ch05:野人与传教士过河问题的实现 安装JDK、配置环境变量,打开Eclipse导入ch05项目,运行主类crossriver.CrossRiver即可启动演示程序。 Ch06:人机对战五子棋游戏的实现 安装JDK,配置环境变量,双击compile.bat 批处理文件编译项目,双击runFive.bat批处理文件可启动项目。 Ch07:蚁群算法的模拟实现 安装JDK,配置环境变量,导入ch07项目,一般情况下直接保存、运行ant.UI即可启动程序。如果不能运行,将ch07文件夹下的swt.jar加入构建路径,然后在运行中的JVM参数中加入-Djava.library.path="dll所在目录的绝对路径"即可。 也可以在命令行下直接运行该程序,假设ch07文件夹放在D盘跟目录。则在cmd下切换到ch07文件夹下,运行如下命令即可启动程序: java -cp D:\ch07\swt.jar;.; -Djava.library.path=D:\ch07 ant.UI ch08:SchoolEbay的实现 安装JDK,配置环境变量,安装ant和tomcat,并配置相应环境变量,不清楚的读者可以参见其文档。安装SQL Server 2000或更高版本,注意SQL Server 2000必须打sp3补丁,否则无法监听端口,客户端不能连接。 然后SchoolEbay\database目录下的数据库文件附加到Sql Server,具体操作是打开企业管理器,在左边的树状列表中右击数据库,在弹出的快捷菜单中选择“所有任务”|“附加数据库”命令,再选择要附加的数据库文件即可。 打开控制台(运行中输入cmd),将目录转到SchoolEbay所在目录,输入ant命令来编译打包程序(编译前请修改datasource下的Constants.java文件,将其中的username和passoword修改为SQL Server的用户名和密码)。将生成的SchoolEbay.war添加到Tomcat的webapps目录下,并启动Tomcat、启动Sql Server。访问http://localhost:8080/SchoolEbay/index.jsp,可启动本项目。 Ch09:Ajax技术在网上教学平台的应用 安装JDK,配置环境变量,安装Tomcat、SQL Server并进行相应配置。创建数据库Ajax,然后使用sql目录下的ajaxbak文件还原数据库。为Eclipse安装MyEclipse插件。使用Eclipse导入项目ch09, 在src/config.properties中配置数据库连接信息, 然后部署项目、启动tomcat。 访问http://localhost:8080/ajax即可启动本程序。 Ch10:一个简单的编译器实现 安装JDK、配置环境变量,启动Eclipse并导入ch10项目,运行主类calculator.Calculator即可。 Ch11:基于RMI分布计算实例 安装JDK、配置环境变量,编译java源文件(可以用eclipse自动编译也可以手动命令行下编译),然后命令行下运行如下命令启动服务器端: java rmi.NetS 2000 (端口号为2000)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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