Super Jumping! Jumping! Jumping!(dp)

Problem:Super Jumping! Jumping! Jumping!

Description:
Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now.

在这里插入图片描述

The game can be played by two or more than two players. It consists of a chessboard(棋盘)and some chessmen(棋子), and all chessmen are marked by a positive integer or “start” or “end”. The player starts from start-point and must jumps into end-point finally. In the course of jumping, the player will visit the chessmen in the path, but everyone must jumps from one chessman to another absolutely bigger (you can assume start-point is a minimum and end-point is a maximum.). And all players cannot go backwards. One jumping can go from a chessman to next, also can go across many chessmen, and even you can straightly get to end-point from start-point. Of course you get zero point in this situation. A player is a winner if and only if he can get a bigger score according to his jumping solution. Note that your score comes from the sum of value on the chessmen in you jumping path.
Your task is to output the maximum value according to the given chessmen list.

Input:
Input contains multiple test cases. Each test case is described in a line as follow:
N value_1 value_2 …value_N
It is guarantied that N is not more than 1000 and all value_i are in the range of 32-int.
A test case starting with 0 terminates the input and this test case is not to be processed.

Output:
For each case, print the maximum according to rules, and one line one case.

Sample Input:

3 1 3 2
4 1 2 3 4
4 3 3 2 1
0

Sample Output:

4
10
3

Language:C++

#include <iostream>
#include <cstring>
#define INF 0x3f3f3f3f

using namespace std;

int N;
int a[1001],f[1001];
int ans;

void dp()
{
  f[0]=a[0];
  ans=-INF;
  for(int i=1;i<N;i++)
  {
    for(int j=0;j<i;j++)
    {
      if(a[i]>a[j]) f[i]=max(f[i],f[j]+a[i]);
      else  f[i]=max(f[i],a[i]);
    }
    ans=max(ans,f[i]);
  }
}

int main()
{
  while(cin>>N&&N)
  {
    for(int i=0;i<N;i++) cin>>a[i];

    memset(f,0,sizeof(f));

    dp();
    cout<<ans<<endl;
  }
  return 0;
}
马尔科夫跳跃神经网络(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函数或自定义函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值