NOIP2000提高组第二轮T4:方格取数

news2024/12/26 2:55:45

题目链接

[NOIP2000 提高组] 方格取数

题目描述

设有 N × N N \times N N×N 的方格图 ( N ≤ 9 ) (N \le 9) (N9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0 0 0。如下图所示(见样例):
在这里插入图片描述

某人从图的左上角的 A A A 点出发,可以向下行走,也可以向右走,直到到达右下角的 B B B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 0 0 0)。
此人从 A A A 点到 B B B 点共走两次,试找出 2 2 2 条这样的路径,使得取得的数之和为最大。

输入格式

输入的第一行为一个整数 N N N(表示 N × N N \times N N×N 的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的 0 0 0 表示输入结束。

输出格式

只需输出一个整数,表示 2 2 2 条路径上取得的最大的和。

样例 #1

样例输入 #1

8
2 3 13
2 6  6
3 5  7
4 4 14
5 2 21
5 6  4
6 3 15
7 2 14
0 0  0

样例输出 #1

67

算法思想(动态规划)

算法思想(动态规划)

根据题目描述,要求从 ( 1 , 1 ) (1,1) (1,1) ( n , n ) (n,n) (n,n)共走两次,试找出 2 2 2 条这样的路径,使得取得的数之和为最大。

在取数过程中,由于每个格子只能取数一次。那么存在这样的性质:除了起点和终点,当路径没有交点时,收益不会比存在交点时更差。证明方式参考博主的另一篇博客:NOIP2005提高组第二轮T3:传纸条。

有了上述性质,就可以让两个条路径同时从左上角的 A A A 点出发,每次同时走一步,由于只能向下和向右走,最终会同时到达右下角。那么可以用下述动态规划思想来解决:

  • 状态表示:f[x1,y1,x2,y2]表示两条路径同时走了若干步之后,第一条到达(x1, y1)、第二条到达(x2, y2)时的最大值。
  • 状态计算,可以按照最后一步的走法分成下面 4 4 4种情况,取其中的最大值:
    • 同时向右走为,f[x1,y1-1,x2,y2-1] + w[x1, y1] + w[x2, y2]
    • 第一条向右走、第二条向下走为,f[x1,y1-1,x2-1,y2] + w[x1, y1] + w[x2, y2]
    • 第一条向下走、第二条向右走为,f[x1-1,y1,x2,y2-1] + w[x1, y1] + w[x2, y2]
    • 同时向下走为,f[x1-1, y1,x2-1,y2]+ w[x1, y1] + w[x2, y2]

需要注意的是,在状态计算中:

  • 两条路径如果走到相同格子,那么该格子的数字只能加 1 1 1

时间复杂度

一共有 O ( n 4 ) O(n^4) O(n4) 个状态,每个状态需要 O ( 1 ) O(1) O(1)的计算量,因此总时间复杂度是 O ( n 4 ) O(n^4) O(n4)

代码实现

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 15;
int w[N][N], f[N][N][N][N];

int main()
{
    int n, x, y, z;
    cin >> n;
    while(cin >> x >> y >> z, x || y || z) w[x][y] = z;
    for(int x1 = 1; x1 <= n; x1 ++)
        for(int y1 = 1; y1 <= n; y1 ++)
            for(int x2 = 1; x2 <= n; x2 ++)
                for(int y2 = 1; y2 <= n; y2 ++)
                {
                    int t = max(max(f[x1][y1 - 1][x2][y2 - 1], f[x1][y1 - 1][x2 - 1][y2]),
                            max(f[x1 - 1][y1][x2 - 1][y2], f[x1 - 1][y1][x2][y2 - 1]));
                    if(x1 == x2 && y1 == y2)
                        f[x1][y1][x2][y2] = t + w[x1][y1];
                    else 
                       f[x1][y1][x2][y2] = t + w[x1][y1] + w[x2][y2]; 
                }
    cout << f[n][n][n][n] << endl;
}

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

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

相关文章

学习c++的第十四天

目录 动态内存 new 和 delete 运算符 命名空间 定义命名空间 using 指令 不连续的命名空间 嵌套的命名空间 模板 函数模板 类模板 C 中 typename 和 class 的区别 函数模板的重载 动态内存 了解动态内存在 C 中是如何工作的是成为一名合格的 C 程序员必不可少的。…

二.ACW154. 滑动窗口详解

窗口滑动: 几行代表for里的语句 1行看队列,例子.空的不执行 2行q[0]1 3行看队列.1>-1不执行 4行看例子例子.窗口不完整 ht1,只看最后一行的总队列q就行1行.2<6不执行,只存越来越大 2行q[1]2,所以q存的下标 3行.i在增加,1>0不执行,新循环了,对头元素滑出窗口 4行窗口不…

使用Python自动修改电脑的静态IP地址

目录 一、引言 二、实现思路 三、详细步骤 四、Python代码 五、注意事项 六、适用性和局限性 七、总结 一、引言 在网络应用中&#xff0c;有时我们需要频繁更改电脑的静态IP地址。例如&#xff0c;当我们在不同网络环境&#xff08;家庭、办公室&#xff09;中使用电脑…

AMEYA360荣获“国际潜力之星分销商”奖!

由全球电子技术领域知名媒体集团ASPENCORE主办的“全球电子元器件分销商卓越表现奖"颁奖典礼于2023年11月3日晚在深圳大中华喜来登酒店圆满结束! 全球电子元器件分销商卓越表现奖创办于2001 年&#xff0c;迄今已成功举办20年&#xff0c;此奖项旨在表彰支持电子产业发展的…

电脑监控软件丨2023全网最详细解析

电脑监控软件是一个比较敏感的话题&#xff0c;因为很多员工会觉得电脑监控侵犯了自己的隐私&#xff0c;电脑上企业会觉得安装软件只不过是为了保护自己的核心利益。 对于此&#xff0c;我们要辩证的看待。 今天我们从企业的角度出发&#xff0c;谈谈电脑监控软件的话题。 必…

【数据结构】 二叉树理论概念!一文了解二叉树!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 数据结构解析 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️树的概念☁️树的结构☁️树的小知识☁️树的表示与运用 &#x1f324…

Android View 触摸反馈原理浅析

重写OnTouchEvent() 然后在方法内部写触摸算法 返回true,表示消费事件,所有触摸反馈不再生效,返回事件所有权 if (event.actionMasked MotionEvent.ACTION_UP){performClick()//抬起事件 执行performClick 触发点击 }override fun onTouchEvent(event: MotionEvent): Boolea…

办公套件全家桶 Office2019 mac中文版新功能

office 2019 mac是 Microsoft office 应用程序套件的最新版本。它包括流行的软件&#xff0c;例如 Microsoft Word、Excel、PowerPoint 和 Outlook&#xff0c;office 2019 比其前身有许多新功能和改进&#xff0c;包括增强的协作工具、与 OneDrive 和 SharePoint 等云服务的更…

Figma 怎么切图?新手入门教程详解

Figma 是一个基于浏览器的协作的UI设计工具&#xff0c;其以轻量、便捷、跨平台使用、协同便捷的特点&#xff0c;迅速吸引了广大UI/UX 设计师们的喜欢。但是设计师经常遇到反复切图、交付开发等问题&#xff0c;所以借此机会分享一篇关于 Figma 切图的必要知识点和交付经验。 …

基于 VTable 的多维数据展示的原理与实践

多维表格介绍 多维表格又名透视表、交叉表、Pivot Table&#xff0c;指的是可以在行维度和列维度放入一个或多个维度&#xff0c;显示维度之间相互关系的一种表格。用户可以一目了然地分析出各种场景指标以及对比&#xff0c;旨在帮助业务分析推动决策。 假设需要分析如下表格…

微信支付更换证书最详细方法

6、在【商户平台】&#xff0c;输入操作密码&#xff0c;安全验证后生成证书串 7、在【商户平台】&#xff0c;复制证书串 8、在【证书工具】&#xff0c;粘贴证书串&#xff0c;点击下一步&#xff0c;申请证书成功 &#xff08;若提示"证书与本地公私钥不匹配&qu…

window10 定时任务

window10 定时任务 1、背景2、目标3、思路4、实操4.1、设置定时任务4.2、配置策略4.3、验证 1、背景 项目上由于业务调试需要&#xff0c;开具了一台window10系统&#xff0c;此台window10为项目组公共使用&#xff0c;为防止误操作分配了不通的账号&#xff0c;日常使用各自账…

互联网校园洗衣洗鞋小程序;

互联网校园洗衣洗鞋小程序打造哪足不出户&#xff0c;线上下单上门取货&#xff0c;通过它不仅可以让用户快速便捷的找到小程序下单&#xff0c;在手机上准确的下发洗衣命令&#xff0c;还能洗好后提供取衣服务等&#xff0c;因此受到了广泛用户的喜爱。截止目前&#xff0c;软…

山西电力市场日前价格预测【2023-11-06】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-06&#xff09;山西电力市场全天平均日前电价为126.17元/MWh。其中&#xff0c;最高日前电价为405.20元/MWh&#xff0c;预计出现在18: 15。最低日前电价为0.00元/MWh&#xff0c;预计出…

深入了解Jedis:Java操作Redis的常见类型数据存储

目录 前言 一、Jedis介绍 1.Jedis在各方面的功能 2.特点 二、Java连接Redis 1.导入pom依赖 2.建立连接 三、Java操作Redis的常见类型数据存储 1.字符串 2.哈希表 3.列表 4.集合 5.有序集合 四、Redis的实际应用场景实例 1.会议信息实体 2.自定义注解 3.创建切面…

应用场景 | 中小河流治理监测系统,提升流域智能感知能力

当前&#xff0c;受全球气候变化和人类活动影响&#xff0c;我国中小河流洪涝灾害呈多发、频发趋势&#xff0c;中小河流洪水已成为严重威胁人民群众生命财产安全的重大风险隐患。中小河流治理作为一项重要的民生水利任务&#xff0c;近十年来国家不断加大以防洪为主的治理投入…

初始JVM虚拟机

JVM组成 图解 程序计数器 在JVM线程私有的内存区域中。每个线程都有自己独立的程序计数器。 程序计数器用于存储当前线程正在执行的字节码指令的地址。指示着当前线程执行到了哪一条字节码指令。 堆 是线程共享的区域&#xff0c;用于存储对象的实例和数组对象&#xff1b; …

使用OkHttp库爬取百度云视频详细步骤

目录 摘要 一、OkHttp库简介 二、爬虫基本概念 三、使用OkHttp库爬取百度云视频 1、发送HTTP请求 2、处理响应 3、下载文件 四、可能遇到的问题及解决方案 五、注意事项 总结与建议 摘要 本文将详细介绍如何使用OkHttp库爬取百度云视频。文章首先简要介绍OkHttp库和…

三国志14信息查询小程序(历史武将信息一览)制作更新过程03-主要页面的设计

1&#xff0c;小程序的默认显示 分为三部分&#xff0c;头部的标题、中间的内容区和底部的标签栏。点击标签可以切换不同页面&#xff0c;这是在app.json文件中配置的。代码如下&#xff1a; //所有用到的页面都需要在 pages 数组中列出&#xff0c;否则小程序可能会出现错误或…

YOLO v2(2016.12)

文章目录 AbstractIntroduction当前存在的困境基于此&#xff0c;我们给出了方法 BetterBatch NormalizationHigh Resolution ClassifierConvolutional With Anchor BoxesDimension ClustersDirect location predictionFine-Grained FeaturesMulti-Scale TrainingFurther Exper…