uva1621 Jumping Around

博客介绍了如何解决UVA1621题目,这是一种构造类型的算法问题。当只能跳1格和2格时,可以通过特定策略完成任务。在加入跳3格的情况后,通过利用同余类性质,找到消耗3格并改变位置状态的方法,将问题简化。博主分享了自己的解决方案,并寻求帮助,因为代码无法通过UVA平台的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中文题意刘汝佳紫书上有,这里从略

这种题属于构造题,所谓构造题,就是存在一种正解方法能对付所有情况,只需要找到这个正解方法便能AC。

对于这题,先想简单的情况,假设c=0,也就是你只能跳1格和跳2格,这种时候有什么办法能对于任何数据都能够完成任务呢。不难想到这样一种方法,假如a=1,b=x的时候,我可以一直向右跳2格,跳到尽头后根据x的奇偶性来决定向左还是向右跳1格,然后一直向左跳2格。对于a>1的情况可以先跳1格一直跳到只剩1个的时候在进行前面的方法。其实这种方法用到了一个性质,0,2,4...这些偶数在模2的情况下都是一个同余类,1,3,5...这些是另一个同余类,而每次跳2格只能在自己的同余类里跳来跳去,只有跳1格的时候才能改变成另外的同余类。

那么加入跳3格这种情况的时候,问题变的复杂了些。但是假如我们能找到这么一个方法,使得把3全部用完,而且在当前位置的左边的所有位置都走过,右边所有位置都没走过,那么就能转换成前面只有1格和2格的情况了。利用同余类的性质,我们可以这样思考:在模3的情况下一共有3种同余类,而只有1和2能改变当前同余类,假设现在c%3==0,那么我可以先向右走c/3个3格,然后右跳1格到另一个同余类,向左走c/3个3格,再右跳1格到最后一个同余类,向右走c/3格,这样我就能用掉所有的3格同时也把当前位置的左边全部走过一边,由于3<=a,b,c<=5000,所以c%3==1和c%3==2这两种情况的时候稍微改下方法也能达到我们要的状态。


那么这个问题就完美解决了,可惜我写的代码UVA过不了,望大牛指出哪里有错( ▼-▼ )

#include <stdio.h>
#i
马尔科夫跳跃神经网络(Markovian Jumping Neural Networks, MJNNs)是一种结合了马尔科夫过程和人工神经网络的技术,常用于处理具有随机状态切换的数据,如时间序列预测和模式识别等。在MATLAB中,有许多库和工具箱可以支持MJNN的开发,如Neural Network Toolbox。 以下是一个简单的MATLAB代码示例,展示如何创建一个基本的马尔科夫跳跃神经网络模型: ```matlab % 导入所需库 addpath('toolbox/MJNetToolbox') % 假设MJNetToolbox已经安装 % 创建神经网络结构 numInputs = 10; % 输入特征数 hiddenNodes = [5, 3]; % 隐藏层节点数 numOutputs = 1; % 输出节点数 net = newMJNetwork(numInputs, hiddenNodes, numOutputs); % 设置马尔可夫转移矩阵和初始状态分布 T = randi([1, 3], 3, 3); % 生成一个3x3的随机马尔可夫矩阵,表示状态之间的概率转移 pi = ones(1, 3) / 3; % 初始状态均匀分布 % 训练网络 inputs = ... % 输入数据 targets = ... % 目标数据 net = train(net, inputs, targets, 'TransitionMatrix', T, 'InitialStateDistribution', pi); % 测试网络 testInputs = ... % 测试数据 outputs = predict(net, testInputs); ``` 请注意,这只是一个非常基础的框架,并未包括完整的训练循环和评估步骤。实际使用中,你需要提供适当的数据、调整网络参数并可能利用一些优化技术。此外,`newMJNetwork`, `train`, 和 `predict` 这些函数在真实环境中需要替换为对应的MJNetToolbox函数或自定义函数。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值