Peter算法小课堂—简单建模(3)

news2024/11/19 23:23:39

国王的奖赏系列

国王的奖赏1

题目描述:

你作为战斗英雄得到国王的奖赏,可以在地图上选一块土地。地图里共n*m格土地,第x行第y列的土地格子里标记着d[x][y]的整数价值,可能出现负数。国王让你选择若干列土地,只要是连续的几列土地,你就可以都收入囊中。求你选的土地总价值最大能是多少?当然如果最大值是负数,请输出0

这道题请仔细看标红的地方,这是易错点。当然如果你看到了这几个字,在你没有思路的情况下,也可以骗一点分。读完题目,思考样例,不出意外的话你已经发现了……最大连续子序列和

最大连续子序列和有的小彭友不会,Peter算法小课堂—DP的应用-CSDN博客

#include <bits/stdc++.h>
using namespace std;
const int N=1000;
int d[N][N],clmn[N],f[N],n,m;
int main(){
	freopen("reward1.in","r",stdin);
	freopen("reward1.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>d[i][j];
		}
	}
	for(int j=1;j<=m;j++){
		for(int i=1;i<=n;i++){
			clmn[j]+=d[i][j];
		}
	}
	for(int i=1;i<=m;i++) f[i]=max(f[i-1],0)+clmn[i];
	cout<<max(0,*max_element(f+1,f+1+m));
	return 0;
}

 国王的奖赏2

题目描述:

你作为战斗英雄得到国王的奖赏,可以在地图上选一块土地。地图里共n*m格土地,坐标为(x,y)格子里标记着d[x][y]的整数价值。你可以选择任意的长方形土地块,收入囊中,求你选的土地总价值最大能是多少?当然如果最大值是负数,请输出0

这道题实际上就是最大子矩阵和问题,这个算法复杂度最多n^4,我们一步一步优化。

O(n^4)

那么……二维前缀和怎么算呢?

 

容斥原理解决😀

那么,随便一块长方形怎么算呢?

 

代码来咯

#include <bits/stdc++.h>
using namespace std;
const int N=500;
int s[N][N],d[N][N],n,m,ans;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>d[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			s[i][j]=d[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
		}
	}
	for(int r1=1;r1<=n;r1++){
		for(int r2=r1;r2<=n;r2++){
			for(int c1=1;c1<=m;c1++){
				for(int c2=c1;c2<=m;c2++){
					ans=max(ans,s[r2][c2]+s[r1-1][c1-1]-s[r2][c1-1]-s[r1-1][c2]);
				}
			}
		}
	}
	cout<<ans;
	return 0;
}

 O(n^3)

枚举行数+最大子段和

#include <bits/stdc++.h>
using namespace std;
const int N=500;
int x[N][N],d[N][N],f[N],n,m,ans;
int main(){
	freopen("reward2.in","r",stdin);
	freopen("reward2.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>d[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			x[i][j]=x[i-1][j]+d[i][j];
		}
	}
	for(int r1=1;r1<=n;r1++){
		for(int r2=r1;r2<=n;r2++){
			for(int j=1;j<=m;j++){
				ans=max(ans,f[j]=max(f[j-1],0)+x[r2][j]-x[r1-1][j]);
			}
		}
	}
	cout<<ans;
	return 0;
}

国王的奖赏3

题目描述:

僵尸大战你立下战功,你作为战斗英雄得到国王的奖赏,可以在一排n件绝世珠宝里挑选若干个。从左往右数第i个珠宝价值p[i]。

“你作为我国战斗英雄,本王不会亏待你!这里的宝贝你看看有喜欢的吗?挑两批带回家给你老婆吧。”国王豪爽地介绍着。

听完国王的话,你在思考“挑两批”这三个字的含义。说实话你也不敢多拿,怕遭人白眼。要不这样吧,你就挑2段:每一段至少1个珠宝,最多k个珠宝;这2段要分开,不能相邻。请问你拿走的珠宝最多价值多少?

技巧:遇到一个简单问题要分两次独立不重叠做时,可枚举分割点

#include <bits/stdc++.h>
using namespace std;
const int N=500;
int x[N],s[N],t[N],f[N],g[N],n,ans;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x[i];
	}
	s[0]=x[0]=0;
	for(int i=1;i<=n;i++) s[i]=s[i-1]+x[i];
	f[0]=0;
	for(int i=1;i<=n;i++){
		int j=max(0,i-k);
		f[i]=max(f[i-1],s[i]-s[j]);
	}
	t[n+1]=x[n+1]=0;
	for(int i=n;i>=1;i--) t[i]=t[i+1]+x[i];
	g[n+1]=0;
	for(int i=n;i>=1;i--){
		int j=min(n+1,i+k);
		g[i]=max(g[i+1],t[i]-t[j]);
	}
	for(int i=1;i<=n-2;i++) ans=max(ans,f[i]+g[i+2]);
	cout<<ans<<endl;
	return 0;
}

希望这些对大家有用,三连必回

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

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

相关文章

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备

mfc配置halcon环境

新建mfc窗体 选择基于对话框 打开项目属性 1、附加包含目录添加&#xff1a; $(HALCONROOT)\include;$(HALCONROOT)\include\halconcpp 2、链接器->常规->附加库目录 $(HALCONROOT)\lib\x64-win64 3、链接器->输入->附加依赖项 halcon.lib;halconcpp.lib 在对话…

【期末复习向】n元gram的应用

当 n 1 时&#xff0c; 即出现 在 第 i 位 上 的基 元 w i 独 立于 历 史 。 一元文法也 被 写 为 uni-gram 或 monogram&#xff1b; 当 n 2 时 , 2-gram ( bi-gram ) 被称 为 1 阶 马 尔 可夫 链&#xff1b; 当 n 3 时 , 3-gram( tri-gram ) 被称为 2 阶马尔 可 夫 链 &am…

1-Maven基础

文章目录 Maven基础Maven相关概念构建依赖 Maven用途Maven的工作机制 Maven使用-1-Maven软件的解压与配置步骤1&#xff1a;下载步骤2&#xff1a;解压Maven核心程序步骤3&#xff1a;指定本地仓库步骤4&#xff1a;配置阿里云提供的镜像仓库步骤5&#xff1a;配置 Maven工程的…

2.electron之纯原生js/jquery的桌面应用程序(应用篇)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

破局:国内市场确实存在“消费升级”和“消费降级”,3.0全新新零售商业模式

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播&#xff0c;不敢直播而苦恼吗&#xff1f; 你还在为想做直播&#xff0c;但没空开直播而焦灼吗&#xff1f; 今天&#xff0c;你的问题都可以统统解决 实体行业直播必备黑科技&#xff1a;抖捧AI自动直播 只需要一部手…

uniapp点击按钮,防止按钮多次点击多次触发事件【防抖操作】

图片、 一、在根目录下新建common文件并创建common.js文件&#xff0c;输入下面代码 // 防止处理多次点击function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数&#xff0c; info是点击需要传的参数let that this;if (that.noClick) {// 第一次点…

QT笔记(节选)具体图片等下载资源

QT笔记&#xff08;节选&#xff09;具体图片等下载资源 根据b站视频做的笔记&#xff1a; https://www.bilibili.com/video/BV1g4411H78N?p44&spm_id_frompageDriver&vd_sourcea3e6a48ccd3d7d1f969f662653ed68c9 qt是一个跨平台的c图形用户界面应用程序框架&#x…

音乐制作软件Ableton Live 11 mac功能特点

Ableton Live 11 mac是一款数字音频工作站软件&#xff0c;用于音乐制作、录音、混音和现场演出是一款流行的音乐制作软件。 Ableton Live 11 mac特点和功能 Comping功能&#xff1a;Live 11增加了Comping功能&#xff0c;允许用户在不同的录音轨道上进行多次录音&#xff0c;…

1.3 市面常见测试接口的工具

通过前面的学习,涉及接口测试的一些基础知识我们都已经有了了解,那本小节,我们来看看工作中比较常用的测试接口的工具有哪些。 PostmanPostman是我们平常工作中,最最常用的用来测试接口的工具。对于前端开发和后端开发来说,Postman也是工作中必会的工具,那对于我们测试来…

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生

最近&#xff0c;开发人工智能聊天机器人的公司 OpenAI 遭受了一次规模较大的分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;导致其旗下的 ChatGPT 服务在短短 12 小时内遭遇了 4 次断网&#xff0c;众多用户遭受了连接失败的问题。 这次攻击事件引起了广泛的关…

图片懒加载vue3-lazy

目录 一、实现原理 二、如何使用 1.安装命令 2.main.js入口文件注册插件 3.template中使用指令 三、总结 最近在重构 博客 的时候遇到页面加载慢的问题&#xff0c;原因是页面小图标太多&#xff0c;一次性加载页面压力超大&#xff0c;打算图片可视区域化懒加载&#xf…

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别&#xff1f; 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器&#xff0c;判断…

力扣90. 子集 II(Java 回溯法)

Problem: 90. 子集 II 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 在本题中所给数组nums中的元素有重复&#xff0c;若再直接使用回溯的话会使得最终的子集有重复&#xff1b;其次我们应该知道求子集&#xff0c;求组合这类使用回溯处理的题目&#xff0c;在核心…

【VRTK】【VR开发】【Unity】12-占位身体

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概要】 目前你会发现,就算存在非Trigger Collider的墙壁屏障等,也能够正常穿过,这会导致不沉浸的体验。你需要一个占位身体来实现让墙壁等碰撞并挡住自己…

使用rancher rke快速安装k8s集群

概述 Rancher Kubernetes Engine&#xff08;RKE&#xff09;是一个用于部署、管理和运行Kubernetes集群的开源工具。旨在简化Kubernetes集群的部署和操作。 RKE具有以下特点和功能&#xff1a; 简化的部署过程 RKE提供了一个简单的命令行界面&#xff0c;使您可以轻松地部署…

理解Socket

前言 我在去年就学习过Java中Socket的使用&#xff0c;但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍&#xff0c;看完还是不太理解到底什么是Socket&#xff0c;还是很迷。直到最近在学习计算机网络&#xff0c;我才对Socket有了一个更深地理解。之前一…

GD32f103系列教程—(程序下载篇)

简介 芯片程序下载的方式有很多种&#xff0c;大部分的可以支持串口&#xff0c;SWD&#xff0c;jtag等方式进行下载&#xff0c;当然还有一些芯片可以支持IIC&#xff0c;SPI&#xff0c;以太网&#xff0c;USB等方式&#xff0c;其实原理大同小异。 GD32F103系列是可以支持串…

中文字符串逆序输出

今天碰到这个题&#xff0c;让我逆序输出中文字符串&#xff0c;可给我烦死了&#xff0c;之前没有遇到过&#xff0c;也是查了资料才知道&#xff0c;让我太汗颜了。 英文字符串逆序输出很容易&#xff0c;开辟一块空间用来存放逆序后的字符串&#xff0c;从后往前遍历原字符串…