0100 蓝桥杯真题03

news2025/1/11 22:57:06

 

 

 

 

 

 

import java.util.Scanner;

/*
 * 题目描述
 * 如下图所示,3 x 3 的格子中填写了一些整数。

        +--*--+--+
        |10* 1|52|
        +--****--+
        |20|30* 1|
        *******--+
        | 1| 2| 3|
        +--+--+--+
        
 *我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。
 *本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
 *如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。
 *如果无法分割,则输出 0。
 *
 *输入解释
 *程序先读入两个整数 m n 用空格分割 (m,n<10)。
 *表示表格的宽度和高度。
 *接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000。
 *
 *输出解释
 *输出一个整数,表示在所有解中,包含左上角的分割区可能包含的最小的格子数目。

    样例输入1
    3 3
    10 1 52
    20 30 1
    1 2 3
    
    样例输出1
    3
    
    样例输入2
    4 3
    1 1 1 1
    1 30 80 2
    1 1 1 100
    
    样例输出2
    10

 * 思路
 * 深搜-->回溯-->剪枝
 */
public class _09剪格子 {
    static int[][] g;//二维数组
    static int[][] vis;//标记已访问
    private static int n;
    private static int m;
    private static int total;//总数
    private static int ans = Integer.MAX_VALUE;//取最小,可以设置成最大
    
    
    //i,j表示坐标,steps表示步数,sum表示总和
    static void dfs(int i,int j,int steps,int sum) {
        
        if(i < 0 || i == n || j < 0 || j == m || vis[i][j] == 1) {//出口:走出边界或已访问
            return;
        }
        if (sum == total / 2) {//出口:等于总数/2
            ans = Math.min(ans, steps);
            return;
        }
        if(sum > total / 2) {//出口:大于总数/2
            return;
        }
        
        vis[i][j] = 1;//标记已访问
        
        dfs(i-1, j, steps+1, sum+g[i][j]);//往上
        dfs(i+1, j, steps+1, sum+g[i][j]);//往下
        dfs(i, j-1, steps+1, sum+g[i][j]);//往左
        dfs(i, j+1, steps+1, sum+g[i][j]);//往右
        
        vis[i][j] = 0;//重置状态
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();//行
        n = sc.nextInt();//列
        g = new int[n][m];//初始化
        vis = new int[n][m];//初始化
        for(int i = 0;i < n;i++) {
            for(int j = 0;j < m;j++) {
                g[i][j] = sc.nextInt();//输入数据存入二维数组g
                total += g[i][j];//总数
            }
        }
        dfs(0, 0, 0, 0);
        System.out.println(ans);
    }
}

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
 * 问题描写叙述
 * 非常久曾经,T王国空前繁荣。为了更好地管理国家,王国修建了大量的高速路,用于连接首都和王国内的各大城市。
 * 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得不论什么一个大城市都能从首都直接或者通过其它大城市间接到达。
 * 同一时候,假设不反复经过大城市。从首都到达每一个大城市的方案都是唯一的。
 * J是T国重要大臣,他巡查于各大城市之间,体察民情。
 * 所以,从一个城市马不停蹄地到还有一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。
 * 聪明的J发现,假设不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关,
 * 在走第x千米到第x+1千米这一千米中(x是整数),他花费的路费是x+10这么多。
 * 也就是说走1千米花费11,走2千米要花费23。
 * J大臣想知道:他从某一个城市出发。中间不歇息,到达还有一个城市。全部可能花费的路费中最多是多少呢?
 * 
 * 输入格式
 * 输入的第一行包括一个整数n,表示包括首都在内的T王国的城市数
 * 城市从1開始依次编号。1号城市为首都。
 * 接下来n-1行,描写叙述T国的快速路(T国的快速路一定是n-1条)
 * 每行三个整数Pi, Qi, Di。表示城市Pi和城市Qi之间有一条快速路,长度为Di千米。
 * 
 * 输出格式
 * 输出一个整数,表示大臣J最多花费的路费是多少。

    例子输入1
    5
    1 2 2
    1 3 1
    2 4 5
    2 5 4
    例子输出1
    135
    
 * 思路
 * 走1千米花费11,走2千米要花费23
 * 11+12+13+14+.....==>等差求和 a1*n+n*(n-1)/2
 * 
 * 树的直径:树上任意两节点之间最长的简单路径
 * 任意找一个点为根,dfs整棵树找到距离他最远的点xx,再以这个点xx为根求出距离它最远的点yy,(x,y)即为直径
 *    
 */
public class _10大臣的旅费 {
    private static int n;
    private static List<Node>[] g;//邻接表
    private static int max = -1;
    private static int point = -1;
    
    static int disMoney(int dis) {
        return    11*dis + dis*(dis-1)/2;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        g = new List[n+1];
        for(int i = 1;i <= n;i++) {
            g[i] = new ArrayList<Node>();
        }
        
        for(int i = 0;i < n-1;i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c = sc.nextInt();
            
            g[a].add(new Node(b,c));
            g[b].add(new Node(a,c));
        }
        //以1为根,找出距离它最远的点
        dfs(1,1,0);//找到point
        dfs(point,point,0);
        System.out.println(disMoney(max));
    }
    
    //from:来自哪个点,num:当前点,dis:累计距离
    private static void dfs(int from,int num,int dis) {
        
        boolean isLeaf = true;
        
        List<Node> neighbors = g[num];
        for(int i = 0;i < neighbors.size();i++) {
            Node neighbor = neighbors.get(i);
            if(neighbor.num == from) {
                continue;
            }
            isLeaf = false;
            dfs(num,neighbor.num,dis+neighbor.dis);
        }
        
        if(isLeaf && dis > max) {//是叶子节点
            max = dis;
            point = num;
        }
    }
    
    static class Node{
        int num;//编号
        int dis;//距离
        
        public Node(int num, int dis) {
            this.num = num;
            this.dis = dis;
        }
    }
}

 

 

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

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

相关文章

【Redis-04】Redis两种持久化方式(RDB和AOF)

Redis是基于内存的数据结构服务器&#xff0c;保存了大量的键值对数据&#xff0c;所以持久化到磁盘是非常必要的&#xff0c;Redis提供了两种持久化的方式&#xff0c;分别是RDB和AOF。下面我们看下这两种持久化方式的具体实现原理。 1.RDB持久化 首先&#xff0c;RDB持久化方…

Mysql基础

Mysql基础1. 数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL2. Mysql的安装2.1 MySQL数据模型3. SQL概述3.1 SQL简介3.2 通用语法3.3 SQL分类4. DDL:操作数据库4.1 数据库的显示讲解4.2 查询4.3 创建数据库4.4 删除数据库4.5 使用数据库4.6 小结5…

linux Qt编译自己的动态库(.so),详细全流程

本篇记录Qt编译动态库全流程 1. 建立工程 首先&#xff0c;打开Qt&#xff0c;新建C Library 工程 点击choose之后&#xff0c;输入项目名称为Example&#xff0c;一直下一步即可 生成的项目里边有三个文件&#xff0c;分别是example.h, Example_global.h, example.cpp exam…

数据结构之:递归思想

&#xff08;一&#xff09;递归概念 将复杂问题 递推分解为最简问题 然后将结果回归的过程 Windows - Linux Linux Linux is not Unix 使用方法&#xff1a; 自己调用自己&#xff08;二&#xff09;斐波那契数列 兔子问题 有一对大兔子 每个月繁衍 一对小兔子&#xff08;一…

【Java 设计模式】UML 之类图

UML 之类图前言&#xff1a;什么是 UML &#xff1f;1 类图概念2 类的表示方式3 类与类之间关系的表示方式3.1 关联关系3.1.1 单向关联3.1.2 双向关联3.1.3 自关联3.2 聚合关系3.3 组合关系3.4 依赖关系3.5 继承关系3.6 实现关系前言&#xff1a;什么是 UML &#xff1f; 定义…

Linux 软件包下载加速工具:APT Proxy

本篇文章将继续介绍这个仅有 2MB 身材大小的 Linux 软件包缓存和加速工具&#xff1a;APT Proxy。 相比老牌的 apt cacher ng 而言&#xff0c;除了尺寸更小、内存占用更低&#xff08;10M以内&#xff09;、它还拥有无需配置&#xff0c;开箱即用等特点。 写在前面 年中的时…

!与~有什么区别

目录 将整型数据转换为二进制的函数 利用函数查看&#xff01;与~之后的数据有何不同 以一个非0数据作为例子 以0作为例子 我们都知道&#xff01;与~都是用于取反的。那么这两个有什么区别呢&#xff1f; 我们百度结果如下&#xff0c;很明显&#xff0c;八股文。我接下…

element-ui时间选择器(DatePicker )数据回显

系列文章目录 第一篇【element-ui】table表格底部合计自定义配置 目录 前言 一、element-ui时间选择器&#xff08;DatePicker &#xff09;是什么&#xff1f; DatePicker 日期选择器 二、返回数据格式 1.引入 总结 前言 需求&#xff1a;element-ui时间选择器&#…

【报错】QT Release NO CMAKE_CXX_COMPILER could be found

NO CMAKE_CXX_COMPILER could be found 错误&#xff1a; Tell CMake where to find the compiler by setting either the environmentvariable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path tothe compiler, or to the compiler name if it …

PostgreSQL数据库动态共享内存管理器——dynamic shared memory segment

首先看dynamic_shared_memory_type GUC参数&#xff0c;该参数用于指定dynamic shared memory implementation类型&#xff08;DSM_IMPL_POSIX、DSM_IMPL_SYSV、DSM_IMPL_WINDOWS、DSM_IMPL_MMAP&#xff0c;定义在src/include/storage/dsm_impl.h文件中&#xff09;。了解一下…

前段入门-CSS

目录1 CSS 快速入门1.1 CSS 的介绍1.2 CSS 的组成2 基本语法2.1 CSS 的引入方式2.1.1 内联样式2.1.2 内部样式2.1.3 外部样式2.2 注释2.3 选择器2.3.1 基本选择器2.3.2 属性选择器2.3.3 伪类选择器2.3.4 组合选择器2.4 总结3 CSS 案例-头条页面3.1 案例效果3.2 案例分析3.2.1 边…

【第三部分 | 移动端开发】4:Rem布局

目录 | Rem布局简介 | 单位 rem | 媒体查询 | 根据不同的媒体引入不同的CSS | less基础 概述与安装 基础使用&#xff1a;创建less文件 基础使用&#xff1a;变量 基础使用&#xff1a;用Esay LESS插件把less文件编译为css 基础使用&#xff1a;嵌套 基础使用&#x…

cuda在windows10安装教程

CUDA安装教程&#xff0c;以Windows10系统为例&#xff1a; CUDA.exe安装 查看电脑的支持的CUDA版本&#xff0c;按照如下教程&#xff1a; 首先找到这个图标&#xff0c;也就是nvidia控制面板&#xff0c;然后打开&#xff1a; 然后点击左下角系统信息 再点击“组件”&…

LabVIEW性能和内存管理 8

LabVIEW性能和内存管理 8 本文介绍LabVIEW性能和内存管理的几个建议8。 MemoryFragmentation内存碎片 内存管理器分配和释放内存需要时间&#xff0c;这会降低执行速度。在某些情况下&#xff0c;即使假设有足够的可用内存&#xff0c;也会发生内存不足错误。 上图显示了实际…

【练拳不练功,到老一场空】深入浅出计算机组成原理

深入浅出计算机组成原理 文章目录深入浅出计算机组成原理计算机的基本组成硬件设备组成CPU内存主板I/O 设备硬盘显卡冯.诺依曼体系结构运算器/处理器单元控制器存储器输入设备输出设备举个栗子&#xff1a;计算机的性能与功耗响应时间吞吐率CPU时钟/主频计算机的功耗计算机的指…

jdk8新特性(Lambda、Steam、函数式接口)

JDK8新特性 JDK8新特性Lambda表达式函数式&#xff08;Functional&#xff09;接口方法引用与构造器引用方法引用构造器引用强大的 StreamAPI创建Stream方式Stream 的中间操作Stream 的终止操作Optional 类Java 8 (又称为jdk 1.8)是Java语言开发的一一个主要版本。 Java 8是ora…

Electron 之通讯模块ipcMain 和 ipcRenderer

Electron一个使用HTML、CSS和JavaScript开发桌面应用程序的框架。Electron可以生成在Windows、macOS和Linux上运行的应用程序&#xff0c;借助Electron可以把我们的web端应用直接移植到桌面端而无需再次开发&#xff0c;这样我们可以使用同一套代码在不同平台上运行应用&#x…

数据收集面可视化

数据收集面可视化&#xff08;Data Collector Surface Visualization&#xff09;分析选项允许用户指定模型中的某一表面&#xff0c;在光线追迹的过程中收集光线数据&#xff0c;并显示或者输出该面的照度&#xff08;或相关的物理量&#xff09;。该分析选项允许计算&#xf…

电脑网页打不开提示错误err connection怎么办?

网页打不开显示err_connection_reset网络错误&#xff0c;怎么解决err_connection_reset网络错误&#xff1f;下面我们就来看看解决电脑err_connection_reset网络错误的方法&#xff0c;请看下文详细介绍。 方法一&#xff1a;组件注册 1、我们点下键盘的winR&#xff0c;输入…

2. 选择排序

2.1 内存的工作原理 需要将数据存储到内存时&#xff0c;你请求计算机提供存储空间&#xff0c;计算机给你一个存储地址。 需要存储多项数据时&#xff0c;有两种基本方式——数组和链表。 2.2 数组和链表 有时候&#xff0c;需要在内存中存储一系列元素。 使用数组意味着所…