小小算法题(CCF)

题目    淘金

题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子。这一天,你到这里来淘金,然而当地人告诉你,如果你要挖(x, y)区域的金子,就不能挖(x-1,y),(x+1, y)以及横坐标为y-1和y+1的金子(也就是说你挖了某一区域的金子,上一行,下一行,左边,右边的金子你都不能被允许挖了)。那么问题来了:你最多能淘金多少? 数据输入 对于每组数据,第一行两个数n,m,表示土地的长和宽(1<=n,m<=200) 接下来n行,每行m个数,表示每个区域的金子数量,每个区域的金子数量不超过1000 结果输出 对于每组数据,输出最多得到的金子数量。

       a[i]记录某一行第i块金子的数目。

思路:这个题可以采取动态规划的思想。挖了某一块的金子就无法挖这块金子上一行,下一行,左边与右边的金子。

那么可以考虑一个简化的淘金,假设只有一行,那么如果你挖了a[i],你就没有办法挖a[i-1]与a[i+1]。假设,d[i]代表截止挖到这一行第i块金子,我已经得到的最大金子数量,那么d[总共列数]就是这一行最大能挖到的金子数量。d[i] =max{d[i-2]+d[i-3]}+a[i]; 

最后,每一行能够得到的最大金子数都为d[最大列数]。然后,我们对d[i][最大列数]进行列举递推方程式。

k[i][最大列数]代表截止到第i行为止,能获得的最大的金子数

k[i][最大列数]=max{k[i-2][最大列数],k[i-3][最大列数]}+d[i];

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 200 + 10;
int a[maxn][maxn];	// 区域金子量
int b[maxn];	// 考虑某一行,b[i]表示[0, i]这个区域中并且选择了i个金子能得到最大值// b[i] = max(b[i-2], b[i-3])+a[i] 
int c[maxn];	// c[i]表示第i行能得到的最多金子数量
int d[maxn];	// d[i]表示考虑[0,i]行,选择了第i行能得到最多金子 
int main(){int n, m;while(scanf("%d%d", &n, &m)==2) {for(int i=0; i<n; i++) {for(int j=0; j<m; j++) scanf("%d", &a[i][j]);}for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {b[j] = max(j-2>=0?b[j-2]:0, j-3>=0?b[j-3]:0) + a[i][j];}c[i] = max(b[m-1], m-2>=0?b[m-2]:0);		// 第i行能得到的最多金子数量 d[i] = max(i-2>=0?d[i-2]:0, i-3>=0?d[i-3]:0) + c[i];}printf("%d\n",  max(d[n-1], n-2>=0?d[n-2]:0));}return 0;
}

 

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

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

相关文章

01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)

文章目录1. 导入包2. 预览数据3. 逻辑回归4. 神经网络4.1 定义神经网络结构4.2 初始化模型参数4.3 循环4.3.1 前向传播4.3.2 计算损失4.3.3 后向传播4.3.4 梯度下降4.4 组建Model4.5 预测4.6 调节隐藏层单元个数4.7 更改激活函数4.8 更改学习率4.9 其他数据集下的表现选择题测试…

python中的异步与同步

异步&#xff1a; 多任务&#xff0c; 多个任务之间执行没有先后顺序&#xff0c;可以同时运行&#xff0c;执行的先后顺序不会有什么影响&#xff0c;存在的多条运行主线 同步&#xff1a; 多任务&#xff0c; 多个任务之间执行的时候要求有先后顺序&#xff0c;必须一个先执行…

C语言指针祥讲

前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根…

编程挑战(6)

组合算法&#xff1a;开一个数组&#xff0c;其下标表示1到m个数&#xff0c;数组元素的值为1表示其下标代表的数被选中&#xff0c;为0则没有选中。 首先初始化&#xff0c;将数组前n个元素置1&#xff0c;表示第一个组合为前n个数&#xff1b;然后从左到右扫描数组元素值的“…

[编程启蒙游戏] 2. 奇偶数

文章目录1. 游戏前提2. 游戏目的3. python代码1. 游戏前提 孩子知道奇偶数是什么&#xff0c;不知道也没关系 还可以采用掰手指演示&#xff0c;伸出两个手指能配对&#xff0c;所有伸出来的手指都两两配对了&#xff0c;伸出来的手指个数就是偶数如果还有1个没有找到朋友的手…

进程间通信-Queue 消息队列 先进先出

Process之间有时需要通信&#xff0c;操作系统提供了很多机制来实现进程间的通信。 multiprocessing模块的Queue实现多进程之间的数据传递&#xff0c;Queue本身是一个消息列队程序 初始化Queue()对象时&#xff08;例如&#xff1a;qQueue()&#xff09;&#xff0c;若括号中没…

过压保护(1)

征一个简单、可靠的电源过压保护电路 http://www.amobbs.com/thread-5542005-1-1.html 防过压&#xff1a;过压之后TVS导通&#xff0c;电流由正极流经自恢复保险再流经TVS到负极&#xff0c;自恢复保险升温&#xff0c;阻值变大&#xff0c;相当于断开&#xff0c;等电流撤去&…

spring boot+thmyleaf ModelAndView页面传值

如上图所示&#xff0c;当我们从后台通过ModelAndView进行传值的时候&#xff0c; 一定要注意&#xff0c;千万不要向上图那样开头加上反斜杠&#xff0c;开头加反斜杠&#xff0c;系统会默认为相对路径&#xff0c; 虽然也能找到相应的视图&#xff08;html&#xff09;&#…

python中的进程, 线程

进程是操作系统分配资源的最小单位 线程是操作系统调度执行的最小单位 定义的不同 进程是系统进行资源分配的最小单位. 线程是进程的一个实体,是CPU进行调度的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(…

LeetCode 214. 最短回文串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。 找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: "aacecaaa" 输出: "aaacecaaa"示例 2: 输入: "abcd" 输出: "…

转:c#委托事件实现窗体传值通信

C#实现Winform窗口间数据交互的三种方法介绍 2010-03-15 来自&#xff1a;CNBLOG 字体大小&#xff1a;【大 中 小】摘要&#xff1a;本文分别介绍C#实现Winform窗口间数据交互的三种方法&#xff1a;修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法&#xff0c…

python中的多线程-threading

python的thread模块是比较底层的模块&#xff0c;python的threading模块是对thread做了一些包装的&#xff0c;可以更加方便的被使用 创建多线程&#xff1a; from threading import Thread import time def sing(): for i in range(3): print("唱歌") time.sleep(…

LeetCode 1566. 重复至少 K 次且长度为 M 的模式

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr&#xff0c;请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组&#xff08;连续的子序列&#xff09;&#xff0c;连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 …

R语言的安装与配置

一、什么是 R 语言 R 编程语言被广泛应用在统计科学和商业领域。 在各种编程语言排名中 R 语言的排名都很靠前。 它是一款集成了数据操作、统计&#xff0c;以及可视化功能的优秀开源软件。免费&#xff0c;开源是 R 重要的特点。 二、什么是 RStudio RStudio 是用亍 R 编程的…

python中的多线程-共享全局变量

在一个进程内的所有线程共享全局变量&#xff0c;能够在不适用其他方式的前提下完成多线程之间的数据共享&#xff08;这点要比多进程要好&#xff09; 缺点就是&#xff0c;线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱&#xff08;即线程非安全&#xff09; …

R语言第一讲

一、R语言入门推荐 推荐四本材料书&#xff1a;R CookBook &#xff1a;hhtp&#xff1a;//www.cookbook-r.com/R in Action http://www.amazon.com/R-Action-Robert-Kabaccoff/dp/1935182390Ggplot2:Elegant Graphics for Data Analysis(User R):hhtp://www.amazon.com/ggplo…

LeetCode 1567. 乘积为正数的最长子数组长度

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 示例 1&#xff1a; 输入&#xff1a;nums [1,-2,-…

python中的互斥锁

如果没有控制多个线程对同一资源的访问&#xff0c;对数据造成破坏&#xff0c;使得线程运行的结果不可预期。这种现象称为“线程不安全”。 线程同步解决问题: 系统调用t1&#xff0c;然后获取到num的值为0&#xff0c;此时上一把锁&#xff0c;即不允许其他现在操作num 对nu…

R语言第二讲

1、R语言包的概念 R提供了大量开箱即用的功能&#xff0c;但它最激动人心的一部分功能是通过可选模块的下载和安装 来实现的。目前有2500多个①称为包&#xff08;package&#xff09;的用户贡献模块可从 http://cran.r-project.org/ web/packages 下载。这些包提供了横跨各种…

LeetCode 1568. 使陆地分离的最少天数(DFS)

文章目录1. 题目2. 解题1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid &#xff0c;其中 0 表示水&#xff0c;而 1 表示陆地。 岛屿由水平方向或竖直方向上相邻的 1 &#xff08;陆地&#xff09;连接形成。 如果 恰好只有一座岛屿 &#xff0c;则认为陆地是 连通的 &…