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;
}

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

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

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

相关文章

springcloudalibaba01

整合springcloud 和 springcloudalibaba&#xff0c;&#xff0c;&#xff0c; 版本对应关系 <dependencyManagement><dependencies><!--每个springcloud的工具都有一个版本每个springcloud alibaba的工具都有一个版本统一版本--> <!-- 整合…

【lesson15】进程控制之进程等待(2)

文章目录 进程等待阻塞式等待非阻塞式等待非阻塞式等待 vs 阻塞式等待 进程等待 上次我们讲了许多关于进程等待的必要性和重要性还有其函数的使用方法&#xff0c;这次我们主要介绍函数细节方面的问题。 阻塞式等待 代码演示进程阻塞式等待 代码&#xff1a; #include <…

STL中sort的底层实现

文章目录 1、源码分析2、算法优化3、总结 在讲解STL中sort的底层原理之前&#xff0c;先引申出这样几个问题&#xff1f; ①STL中sort的底层是采用哪种或者哪几种排序&#xff1f; ②STL中sort会导致栈溢出吗&#xff1f; ③快速排序的时间复杂度是不稳定的 l o g 2 n log_2n l…

力扣22. 括号生成(java 回溯法)

Problem: 22. 括号生成 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们首先要知道&#xff0c;若想生成正确的括号我们需要让右括号去适配左括号&#xff0c;在此基础上我们利用回溯去解决此题目 1.题目给定n个括号&#xff0c;即当回溯决策路径长度等于 2 n 2n…

vue3 + ts 防抖指令,节流指令,复制指令

vue3 ts 自定义指令 防抖指令&#xff0c;节流指令&#xff0c;复制指令 本文使用了 element-ui , element-plus 官网 源文件 https://admin.spicyboy.cn/#/directives/debounceDirect 新建 copy.ts 文件 &#xff08;复制指令&#xff09; import type { Directive, Di…

深入分析ClassLocader工作机制

文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledL…

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…

NO-IOT翻频,什么是翻频,电信为什么翻频

1.1 翻频迁移最终的目的就是减少网络的相互干扰&#xff0c;提供使用质量. 1.2 随着与日俱增的网络规模的扩大&#xff0c;网内干扰已成了影响网络的质量标准之一&#xff0c;为了保障电信上网体验&#xff0c;满足用户日益增长的网速需求,更好的服务客户&#xff0c;电信针对…

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)

背景 在项目过程中&#xff0c;有时候你需要调用非C#编写的DLL文件&#xff0c;尤其在使用一些第三方通讯组件的时候&#xff0c;通过C#来开发应用软件时&#xff0c;就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤 1. 创建一个CSharp…

JMeter下载与安装

文章目录 前言一、安装java环境&#xff08;JDK下载与安装&#xff09;二、JMeter下载三、JMeter安装1.解压缩2.配置环境变量 四、JMeter启动&#xff08;启动成功则代表JMeter安装成功&#xff09;五、JMeter汉化&#xff08;将JMeter修改成中文&#xff09;1.方法一&#xff…

HTTP 301错误:永久重定向,大勇的冒险之旅

大家好&#xff0c;我是大勇&#xff0c;一个喜欢冒险的程序员。今天&#xff0c;我要和大家分享一个我在互联网世界中的冒险故事——如何处理HTTP 301错误&#xff1a;永久重定向。 那天&#xff0c;我像往常一样&#xff0c;打开我的代码编辑器&#xff0c;准备开始一天的工…

Python学习开发mock接口

#1.测试为什么要开发接口&#xff1f; 1)在别的接口没有开发好的时候, mock接口(模拟接口) 2)查看数据, 避免直接操作数据库 #2.开发接口的顺序 1)安装flask flask是一个轻量级开发框架 pip install flask 2)开发一个接口 开发步骤&#xff1a; 1.实例化一个服务server:f…