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

国王的奖赏系列

国王的奖赏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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

商业印刷市场分析:预计2029年将达到53004亿元

商业印刷技术显示了强大的生命力。电子商务的扩张性发展&#xff0c;传统的商务印刷行业也在逐渐的转型。中国印刷业已深度融入全球印刷加工产业链&#xff0c;为国际社会超过50个国家提供印刷包装服务。数据显示&#xff0c;中国印刷业对外加工贸易额已达842亿元。 商业印刷是…

C++模板进阶

文章目录 前言反向迭代器反向迭代器和正向迭代器的区别stl反向迭代器源码反向迭代器模拟实现测试 模板进阶非类型模板参数Array 模板的特化模板的分离编译 前言 模板进阶也没有到一些特别的东西&#xff0c;就是讲比较偏的一些特性。 在这里我们先来讲一下反向迭代器。 反向迭…

一张图系列 - “leetcode快速复习“

什么是leetcode&#xff1f; LeetCode是一个在线评测平台&#xff0c;提供大量算法题目&#xff0c;可帮助程序员提高编程和算法能力。它主要提供算法和数据结构相关的练习题&#xff0c;包括各种难度级别的编程题&#xff0c;从简单的算法题到复杂的系统设计问题都有。用户可…

MATLAB图解傅里叶变换(初学者也可以理解)

1、概述 相信很多人对于傅里叶变换可能觉得比较复杂和有点难懂&#xff0c;其实不难&#xff0c;它只是一种积分变换。 傅里叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。也就是说&qu…

NPM开发工具的简介和使用方法及代码示例

NPM&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;用于管理和共享被发布到模块仓库的JavaScript代码。本文将介绍NPM的定义、使用方法、代码示例以及总结。 一、NPM的定义 NPM是Node.js的默认包管理工具&#xff0c;它的功能包括安装、管理、…

Vue--第八天

Vue3 1.优点&#xff1a; 2.创建&#xff1a; 3.文件&#xff1a; 换运行插件&#xff1a; 4.运行&#xff1a; setup函数&#xff1a; setup函数中获取不到this&#xff08;this 在定义的时候是Undefined) reactive()和ref(): 代码&#xff1a; <script setup> // …

测试总监给我分享的《接口自动化测试》总结,让我成功的入门接口自动化门槛......

前两天在测试技术交流群里&#xff0c;听了一位字节跳动的测试总监分享的接口自动化测试的内容&#xff0c;对接口自动化更加了解了&#xff0c;也为自己接下来在公司实施接口自动化项目提供了思路。 前言 自动化测试&#xff0c;算是近几年比较火热的一个话题&#xff0c;当…

AcWing 1229. 日期问题(反向求解)

题目&#xff1a; 1229. 日期问题 - AcWing题库 思路&#xff1a; 逆向思考 由 02/03/04 寻找 2002-03-04 2004-02-03 2004-03-02 -------> 在19500101到19591231之间寻找&#xff1a;1.满足日期格式的的数满足可表示为02/03/04的数 注意: 特殊格式的输入输出用…

IDEA配置ctrl + / 快捷键注释的位置

对于一个强迫症患者来说&#xff0c;Ctrl / 这个日常使用非常频繁的快捷键默认生成的位置是在每一个的顶格位置&#xff0c;这让我非常苦恼。 刚刚找到了解决方案&#xff0c;分享一下&#xff0c;_ 在IntelliJ IDEA中&#xff0c;如果你想要注释符号紧挨着代码的第一个字母…

(WPF)Serilog 使用demo实例

Serilog 日志效果&#xff1a; 引入的Serilog库文件 实现代码 xaml 代码&#xff1a; <Window x:Class"Wpf_demo_Serilog.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x"http://sche…

Keil uVersion 4单片机开发指南

1 软件安装 双击打开C51V901.exe 弹出安装界面&#xff0c;点击Next>> 点击同意协议勾选框&#xff0c;接着点击Next>> 点击Browse...选择合适的目录&#xff0c;接着点击Next>> 按要求填写相关信息&#xff0c;然后点击Next>> 软件安装中&#xff0c…

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

ISCTF(CRYPTO)

easy_rsa nc连接看看 脚本 import gmpy2import libnumfrom Crypto.Util.number import *from binascii import a2b_hex, b2a_hexflag "*****************"p 11920076502966619778438716819444048800827104655497817807132072529253600622832779629686654276924193…

2024年外贸开发客户攻略,外国客户都在用哪些社交平台?

在之前的文章中&#xff0c;东哥我就讲过做外贸&#xff0c;开发客户很重要&#xff0c;我也曾经总结了几个外贸开发客户的方法给大家参考&#xff0c;不知道大家学会了没&#xff1f;都知道大多数客户喜欢花大量时间泡在社交软件上&#xff0c;所以有不少兄弟对海外社交媒体平…

蓝桥杯真题——01背包问题(java详解)

目录 01背包问题例题引入 蓝桥杯国赛真题 蓝桥杯2195题.费用报销 蓝桥杯2201题.搬砖 01背包问题和最值问题离不开&#xff0c;最值问题嘛&#xff0c;就又和动态规划离不开&#xff0c;大家不太了解动态规划的可以看我之前写的文章&#xff0c;基础版里面有动态规划的模板。…

中文字符串逆序输出

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

西南交通大学【数电实验8---外星萤火虫设计】

一、实验电路图、状态图、程序代码、仿真代码、仿真波形图&#xff08;可以只写出核心功能代码&#xff0c;代码要有注释&#xff09; 代码文件 激励文件 Modelsim仿真 二、引脚分配表&#xff08;电路中的信号名称->主板器件名称->引脚号PIN&#xff09; 信号名 主板器…

【C++初阶】类与对象(上)

类与对象&#xff08;上&#xff09; 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小7.2 结构体内存对齐规则 8.this指针8.1 this指针的引出8.2 this指针的特性…

微软microsoft推出了最新的小型但强大的开源语言AI模型Phi-2

微软推出了最新的小型开源语言模型 Phi-2。该模型只有 27 亿个参数&#xff0c;却能超过比它大 25 倍的模型的性能。Phi-2 是微软 Phi 项目的一部分&#xff0c;旨在制作小而强大的语言模型。该项目包括 13 亿参数的 Phi-1&#xff0c;据称在 Python 编码方面实现了最先进的性能…

如何使用mysql去除表中重复的字段

简介&#xff1a; 此处的建表题目来自我们的也门哥Maged&#xff0c;非常感谢他出的这些测试题目&#xff0c;让我能够独立思考&#xff0c;反复试去找到cw2的正确做法。 数据库准备&#xff1a; 害怕被好homi被刺然后被 academic warning 所以浅浅打个码。 创建好这张表后我…