2023-2-16 刷题情况

news2024/11/15 4:39:27

神经网络

题目背景

人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本神经网络的入门书籍后,提出了一个简化模型,他希望你能帮助他用程序检验这个神经网络模型的实用性。

题目描述

在兰兰的模型中,神经网络就是一张有向图,图中的节点称为神经元,而且两个神经元之间至多有一条边相连,下图是一个神经元的例子:

神经元〔编号为 i i i

图中, X 1 ∼ X 3 X_1 \sim X_3 X1X3 是信息输入渠道, Y 1 ∼ Y 2 Y_1 \sim Y_2 Y1Y2 是信息输出渠道, C i C_i Ci 表示神经元目前的状态, U i U_i Ui 是阈值,可视为神经元的一个内在参数。

神经元按一定的顺序排列,构成整个神经网络。在兰兰的模型之中,神经网络中的神经元分为几层;称为输入层、输出层,和若干个中间层。每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。下图是一个简单的三层神经网络的例子。

兰兰规定, C i C_i Ci 服从公式:(其中 n n n 是网络中所有神经元的数目)

C i = ( ∑ ( j , i ) ∈ E W j i C j ) − U i C_i=\left(\sum\limits_{(j,i) \in E} W_{ji}C_{j}\right)-U_{i} Ci= (j,i)EWjiCj Ui

公式中的 W j i W_{ji} Wji(可能为负值)表示连接 j j j 号神经元和 i i i 号神经元的边的权值。当 C i C_i Ci 大于 0 0 0 时,该神经元处于兴奋状态,否则就处于平静状态。当神经元处于兴奋状态时,下一秒它会向其他神经元传送信号,信号的强度为 C i C_i Ci

如此.在输入层神经元被激发之后,整个网络系统就在信息传输的推动下进行运作。现在,给定一个神经网络,及当前输入层神经元的状态( C i C_i Ci),要求你的程序运算出最后网络输出层的状态。

输入格式

输入文件第一行是两个整数 n n n 1 ≤ n ≤ 100 1 \le n \le 100 1n100)和 p p p。接下来 n n n 行,每行 2 2 2 个整数,第 i + 1 i+1 i+1 行是神经元 i i i 最初状态和其阈值( U i U_i Ui),非输入层的神经元开始时状态必然为 0 0 0。再下面 P P P 行,每行由 2 2 2 个整数 i , j i,j i,j 1 1 1 个整数 W i j W_{ij} Wij,表示连接神经元 i , j i,j i,j 的边权值为 W i j W_{ij} Wij

输出格式

输出文件包含若干行,每行有 2 2 2 个整数,分别对应一个神经元的编号,及其最后的状态, 2 2 2 个整数间以空格分隔。仅输出最后状态大于 0 0 0 的输出层神经元状态,并且按照编号由小到大顺序输出。

若输出层的神经元最后状态均为 0 0 0,则输出 NULL

样例

样例输入

5 6
1 0
1 0
0 1
0 1
0 1
1 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1

样例输出

3 1
4 1
5 1

思路

这种结构就是拓扑排序,但有几个不会的点,需要记录边的权重,之前没用链接表存储边权。

代码实现

import java.util.*;

public class Main{
    static class edge{
        int to;
        // 边权
        int weight;
        // next指向下一个起始点当前i的边。
        int next;
        edge(int to, int weight, int next){
            this.to = to;
            this.weight = weight;
            this.next = next;
        }
    }
    static edge[] e = new edge[220];
    static int cnt = 0;
    static boolean[] vis = new boolean[105], out = new boolean[105];
    static int[] head = new int[105], in = new int[105], c = new int[105];

    static void add(int x, int y, int val){
        ++cnt;
        /
        e[cnt] = new edge(y, val, head[x]);
        head[x] = cnt;
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        Queue<Integer> queue = new ArrayDeque<>();
        int u;
        for(int i = 1; i <= n; i++){
            c[i] = sc.nextInt();
            u = sc.nextInt();
            if(c[i] != 0){
                queue.offer(i);
                vis[i] = true;
            }else c[i] -= u;
        }
        int cur, next, val;
        for(int i = 1; i <= m; i++) {
            cur = sc.nextInt();
            next = sc.nextInt();
            val = sc.nextInt();
            add(cur, next, val);
            in[next]++;
            out[cur] = true;
        }
        while(!queue.isEmpty()){
            int x = queue.poll();
            if(c[x] < 0) continue;;
            for(int i = head[x]; i > 0; i = e[i].next){
                int y = e[i].to;
                --in[y];
                if(!vis[y] && in[y] == 0){
                    queue.offer(y);
                    vis[y] = false;
                }
                c[y] += c[x] * e[i].weight;
            }
        }
        boolean juege = true;
        for (int i = 1; i <= n; i++) {
            if(c[i] > 0 && !out[i]){
                System.out.println(i+" "+c[i]);
                juege =  false;
            }
        }
        if(juege) System.out.println("NULL");
        sc.close();
    }
}

统计特殊子序列的数目

题目描述

特殊序列 是由 正整数 个 0 ,紧接着 正整数 个 1 ,最后 正整数 个 2 组成的序列。

  • 比方说,[0,1,2] 和 [0,0,1,1,1,2] 是特殊序列。
  • 相反,[2,1,0] ,[1] 和 [0,1,2,0] 就不是特殊序列。
    给你一个数组 nums (仅 包含整数 0,1 和 2),请你返回 不同特殊子序列的数目 。由于答案可能很大,请你将它对 109 + 7 取余 后返回。

一个数组的 子序列 是从原数组中删除零个或者若干个元素后,剩下元素不改变顺序得到的序列。如果两个子序列的 下标集合 不同,那么这两个子序列是 不同的 。

样例

样例输入

nums = [0,1,2,2]
nums = [2,2,0,0]
nums = [0,1,2,0,1,2]

样例输出

3
解释:特殊子序列为 [0,1,2,2],[0,1,2,2] 和 [0,1,2,2] 。

0
解释:数组 [2,2,0,0] 中没有特殊子序列。

7
解释:特殊子序列包括:
[0,1,2,0,1,2]
[0,1,2,0,1,2]
[0,1,2,0,1,2]
[0,1,2,0,1,2]
[0,1,2,0,1,2]
[0,1,2,0,1,2]
[0,1,2,0,1,2]

提示

  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • 0 < = n u m s [ i ] < = 2 0 <= nums[i] <= 2 0<=nums[i]<=2

思路

还是动态规划,这个需要回答的大问题,可以化作多个相同类型的子问题进行回答,即可以使用动态规划。
思考动态规划时,还是可以先思考如何写出递归的解决方案。然后就能发现,状态转移方程式。

代码实现

class Solution {
    public int countSpecialSubsequences(int[] nums) {
        int MOD = (int)1e9 + 7;
        long[] dp = new long[3];
        for(int num : nums){
            if(num == 0) dp[0] = (2 * dp[0] + 1) % MOD;
            else if(num == 1) dp[1] = (dp[1] * 2 + dp[0]) % MOD;
            else dp[2] = (dp[2] * 2 + dp[1]) % MOD;
        }
        return (int)dp[2];
    }
}

矩阵中和能被 K 整除的路径

题目描述

给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1) 。

请你返回路径和能被 k 整除的路径数目,由于答案可能很大,返回答案对 109 + 7 取余 的结果。

样例

样例输入

grid = [[5,2,4],[3,0,5],[0,7,2]], k = 3
grid = [[0,0]], k = 5
grid = [[7,3,4,9],[2,3,6,2],[2,3,7,0]], k = 1

样例输出

2
解释:有两条路径满足路径上元素的和能被 k 整除。
第一条路径为上图中用红色标注的路径,和为 5 + 2 + 4 + 5 + 2 = 18 ,能被 3 整除。
第二条路径为上图中用蓝色标注的路径,和为 5 + 3 + 0 + 5 + 2 = 15 ,能被 3 整除。

1
解释:红色标注的路径和为 0 + 0 = 0 ,能被 5 整除。

10
解释:每个数字都能被 1 整除,所以每一条路径的和都能被 k 整除。

提示

  • m = = g r i d . l e n g t h m == grid.length m==grid.length
  • n = = g r i d [ i ] . l e n g t h n == grid[i].length n==grid[i].length
  • 1 < = m , n < = 5 ∗ 1 0 4 1 <= m, n <= 5 * 10^4 1<=m,n<=5104
  • 1 < = m ∗ n < = 5 ∗ 1 0 4 1 <= m * n <= 5 * 10^4 1<=mn<=5104
  • 0 < = g r i d [ i ] [ j ] < = 100 0 <= grid[i][j] <= 100 0<=grid[i][j]<=100
  • 1 < = k < = 50 1 <= k <= 50 1<=k<=50

思路

还是动态规划。

代码实现

class Solution {
    public int numberOfPaths(int[][] grid, int k) {
        int MOD = (int)1e9+7;
        int n = grid.length, m = grid[0].length;
        int[][][] dp = new int[n+1][m+1][k];
        // 初始化起点
        dp[0][1][0] = 1;
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                for(int l = 0; l < k; l++)
                    dp[i+1][j+1][(l + grid[i][j]) % k] = (dp[i+1][j][l] + dp[i][j+1][l]) % MOD;
        return dp[n][m][0];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Airtest自动化测试工具介绍

官方网站&#xff1a;http://airtest.netease.com/ Airtest IDE&#xff1a; 跨平台的UI自动化测试编辑器&#xff0c;适用于游戏和App&#xff0c;详细参见官网文档&#xff1a;http://airtest.netease.com/docs/cn/index.html 这是Airtest测试工具标配的IDE&#xff0c;目…

Eclipse插件安装全方式介绍(优化版)

Eclipse插件安装方式 Eclipse插件安装有很多种方式&#xff0c;常见的有以下四种&#xff1a; [在线安装] -使用插件地址安装[在线安装] - 通过插件市场查找插件安装[离线安装]- 下载插件文件后复制文件Eclipse目录[离线安装]- 外部引用 本篇以安装Eclipse Tomcat插件为例进…

#8排序算法#

1.排序 1概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起 来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排…

AWS攻略——使用ACL限制访问

文章目录确定出口IP修改ACL修改主网络ACL修改入站规则修改子网ACL创建子网ACL新增入站规则新增出站规则关联子网假如我们希望限制只有公司内部的IP可以SSH登录到EC2&#xff0c;则可以考虑使用ACL来实现。 我们延续使用《AWS攻略——创建VPC》的案例&#xff0c;在它的基础上做…

Spring 系列 - AOP

Spring 系列 - AOP Spring 框架从使用到现在已经有相当的长的一段时间了&#xff0c;但总是在使用的时候&#xff0c;感觉一直停留在表面&#xff0c;对框架的底层了解的并不多&#xff0c;最近一段时间&#xff0c;打算好好折腾一下 Spring 的底层&#xff0c;想对 Spring 有…

智能家居项目(二)之工厂模式的实现

目录 一、举例说明&#xff1a;把下面的代码转换成工厂模式的方式来实现 二、用工厂模式的方式来实现 1、创建三个函数的文件 2、创建一个 Animal.h文件&#xff0c;把上述三个函数名都放在这个文件中 3、创建一个main主函数文件 4、用工厂模式创建的文件浏览 一、举例说…

用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(三)(2017)

文章目录用主动游泳的三维水母模型量化美杜莎的&#xff08;medusan&#xff09;机械空间的性能&#xff08;三&#xff09;(2017)原文链接&#xff1a;https://doi.org/10.1017/jfm.2017.34. 讨论小结用主动游泳的三维水母模型量化美杜莎的&#xff08;medusan&#xff09;机械…

iptables防火墙详解

目录iptables防火墙iptables简介iptables表filter(过滤表)nat(网络地址转换表)mangle(修改表)raw(原始表)security 表处理目标REJECT(拒绝)DNAT(目的网络地址转换)SNAT(源网络地址转换)MASQUERADE(伪装)LOGREDIRECT报文处理流程规则表之间的优先顺序报文规则匹配管理防火墙规则…

单调栈---神奇的栈

我们平时用的栈多&#xff0c;但是我们一般用的是什么呢&#xff1f;用来做有效的括号匹配&#xff1f;还是用来记录我们的二叉树的节点&#xff1f; 通过对栈的理解&#xff0c;我们学习一个新的概念–单调栈。所谓单调栈&#xff0c;就是单调递增或者单调递减的栈。 那么单…

第四届宁波网安市赛初赛

由于赛后官方不给wp&#xff08;绿盟一向如此&#xff09;&#xff0c;交流群也没有得到其他题解&#xff0c;赛后就根据自己的wp来写了&#xff0c;wp由队友及我共同完成。比赛共解答10题&#xff0c;Web 5道&#xff0c;Misc 2道&#xff0c;Crypto 3道&#xff0c;wp只有一部…

深度学习算法面试常问问题(一)

博主秋招遇到的面试问题以及整理其他面经相关问题&#xff0c;无偿分享~ 项目叙述&#xff1a; 算法需求及应用场景算法的调研和初步方案的制定数据的准备&#xff08;包括数据标注和数据增强&#xff09;算法的介绍&#xff08;包括输入和输出&#xff0c;loss、backbone、训…

做外贸,你不能不懂的外贸流程知识

报关是履行海关进出境手续的必要环节之一&#xff0c;涉及两大类:进出境运输工具、物品和货物。由于性质不同&#xff0c;报关手续也有些不同。今天我就为大家详细介绍一下进出口报关的流程&#xff0c;包括出口货物报关的流程&#xff0c;随报关单提交的运费和商业单据&#x…

Spark中cache、persist、checkpoint三者的比较

原文链接&#xff1a;https://blog.csdn.net/AnameJL/article/details/124362219&#xff0c;再次主要是为了方便查找&#xff0c;把原文章复制一遍 目录 1. 三者的使用 1.1 cache的讲解与使用 1.2 persist的讲解与使用 1.3checkpoint 的讲解与使用 2. 三者的比较 2.1 优…

基于Web的智慧能源可视化管理系统

自工业革命开始&#xff0c;全球能源消耗持续增长&#xff0c;由碳循环体系破坏引发的全球变暖、海平面上升等问题严重影响着人类的可持续发展。得益于数字孪生、物联网、5G、AI识别等技术的不断成熟&#xff0c;以“大数据能源监控、精细化能源管理”为核心的智慧能源解决方案…

【电子学会】2022年12月图形化三级 -- 绘制雷达

绘制雷达 1. 准备工作 &#xff08;1&#xff09;绘制黑色背景&#xff1b; &#xff08;2&#xff09;删除默认角色小猫&#xff0c;添加角色Pencil。 2. 功能实现 &#xff08;1&#xff09;画笔的颜色设为黄色&#xff0c;Pencil的中心点设在笔尖位置&#xff0c;画笔的…

在Java 中 利用Milo通信库,实现OPCUA客户端,并生成证书

程序结构&#xff1a; 配置文件resources&#xff1a; opcua.properties 西门子PLC端口号为4840&#xff0c;kepserver为49320 #opcua服务端配置参数 #opcua.server.endpoint.urlopc.tcp://192.168.2.102:49320 opcua.server.endpoint.urlopc.tcp://192.168.2.11:4840 opcu…

2023年私募股权基金研究报告

第一章 概况 PE是私募&#xff0c;也即私募投资基金&#xff0c;是指以非公开发行方式向合格投资者募集的&#xff0c;投资于股票、股权、债券、期货、期权、基金份额及投资合同约定的其他投资标的&#xff08;如艺术品、红酒等&#xff09;的投资基金&#xff0c;简称私募基金…

【PyTorch学习3】《PyTorch深度学习实践》——反向传播(Back Propagation)

目录一、Tensor1.定义2.Tensor常见形式3.torch.tensor和torch.Tensor4.Tensor.grad二、反向传播一、Tensor 1.定义 张量的定义是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。 在PyTorch上有这样一句话&#xff0c;A torch.Tensor is a multi…

TeeChart for .NET 2023.2.13 Crack

TeeChart NET Pro Edition 是一个基于 Nuget 的图表控件&#xff0c;旨在为您的 NET 应用程序提供即时图表、地图和仪表功能。TeeChart 拥有数十种图表类型、统计函数和开发人员工具&#xff0c;是当今开发人员可用的最全面的图表库之一。易于使用设计时编辑器和直观的编程结构…

蒙特卡洛计算圆周率

使用MC计算圆周率的小例子&#xff0c;使用python的numpy&#xff0c;matplotlib库import numpy as npimport matplotlib.pyplot as pltdef mc_calculate_pi(t):np.random.seed(t)rand_num np.random.rand(t)rand_num2 np.random.rand(t)l1 rand_num-0.5l2 rand_num2-0.5l0…