HDU 2845 Beans

Windows Server 搭建ftp服务 阅读详情

传送门

最大不相邻子序列和(二维版本)。(没有负数的版本)

这个题先要求出每行的最大不相邻子序列和(所谓不相邻,就是指这个子序列的每个元素在原数组里都是不相邻的),然后将这个矩阵的每行的最优解都当成一个元素,对这个列向量再应用以上。

输入按先行再列,所以边输入边求解,也没必要搞二维数组了(这题只给你一个n*m上限就是逼你这么做的)。

没有负数的情况下,可以想到,最优解的两个元素中间最多隔两个。还是按照最大子串和那样的想法来做,dp[i]表示以当前元素为尾的子问题的最优解,那么dp[i] = a[i] + max(dp[i-2], dp[i-3])。最后的答案在dp[N-1]和dp[N]中产生。

这道题是没有负数的,如果有负数该怎么变?我想的是,首先dp[i]=a[i],其次在dp[1]~dp[i-2]中找一个最大值,如果这个最大值不小于0,则加到dp[i]上面。最后,枚举每个dp[]获得答案。(时间复杂度上升到O(n^2),类似LIS问题了(但LIS问题即使没有负数也不能O(n)解决))


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
                                  // 不支持负数
int N, M;
int row[200000];                  // 把每行都看成一个元素,以当前行元素结尾的不相邻子序列的最大值,必定包含当前行元素
int col[200000];                  // 当前行的以某列元素结尾的不相邻子序列的最大值,必定包含当前元素,只对应当前行

int main()
{
	for (; ~scanf("%d%d", &N, &M);)
	{
		for (int i = 0; i < N; i++)
		{
			for (int j = 0; j < M; j++)
			{
				scanf("%d", &col[j]);
				if (j == 2) col[j] += col[j - 2];
				else if (j > 2) col[j] += max(col[j - 2], col[j - 3]);
			}
			row[i] = M == 1 ? col[M - 1] : max(col[M - 1], col[M - 2]);       // 和最后答案处的判断一样。。
			if (i == 2) row[i] += row[i - 2];
			else if (i > 2) row[i] += max(row[i - 2], row[i - 3]);
		}

		printf("%d\n", N == 1 ? row[N - 1] : max(row[N - 1], row[N - 2]));
	}

	return 0;
}

还有一种我两年前写的(应该不是自己想的)做法我看不懂了,也对,这个里面dp[i]不一定包括当前元素。这个做法同样也不支持负数。


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

int M, N;
int b[200000];                       // 0~i 数组中各不相邻元素最大和(不一定有i)
int c[200000];                       // 不支持负数??(17.6.6)   对,不支持(19.4.24)
                                     // 可以证明其最大和在两个元素间最多空两个
int main()
{
	int a;
	for (; ~scanf("%d%d", &M, &N);)
	{
		for (int i = 0; i < M; i++)
		{
			for (int j = 0; j < N; j++)
			{
				scanf("%d", &a);
				if (j == 0) b[j] = a;
				else if (j == 1) b[j] = max(b[j - 1], a);
				else b[j] = max(b[j - 1], b[j - 2] + a);
			}
			if (i == 0) c[i] = b[N - 1];
			else if (i == 1) c[i] = max(c[i - 1], b[N - 1]);
			else c[i] = max(c[i - 1], c[i - 2] + b[N - 1]);
		}
		printf("%d\n", c[M - 1]);
	}

	return 0;
}
Python实战:5分钟搞定固定翼无人机三自由度仿真(附完整代码) 本文提供了一个基于Python的固定翼无人机三自由度仿真快速实现方案。通过面向对象设计,封装了核心运动学模型,并对比了欧拉法与龙格-库塔法两种积分方法。文章附有完整实例代码,帮助算法工程师和研究人员在5分钟内搭建轻量级仿真环境,用于快速验证控制律、路径规划等核心算法逻辑。 阅读详情

相关推荐

AI大模型驱动的智能座舱研发体系重构

AI大模型正重构智能座舱研发体系的核心逻辑,需以场景认知为起点、混合架构为支柱、AI原生生态为落脚点。未来,研发体系需持续融合认知科学、边缘计算与开放生态理论,推动座舱从“工具”进化为“伙伴”。

我的专栏 1916

hdu2845: Beans

hdu2845: http://acm.hdu.edu.cn/showproblem.php?pid=2845题意:吃豆:如果吃了某个豆(x,y),则x-1和x+1两行都不能吃,(x,y-1)、(x,y+1)也不能吃,求最多能吃多少豆 解法:dp:先算行,再算列,列的算法和行的类似,dp[i][j]表示在第i行中,直到第(i,j)个点的最优值,有状态转移方程:dp[i][j]=max(dp[i]...

weixin_30443075的博客 89

手把手教你用Simulink给C2000配置SCI串口发送数据(附模型与避坑点)

本文详细介绍了如何使用Simulink为C2000系列微控制器配置SCI串口发送数据,包括硬件资源分配、模型搭建、参数设置及调试技巧。通过代码生成和串口通信实践,帮助开发者高效实现嵌入式系统开发,避免常见通信问题。

weixin_30831529的博客 295

HDU 2845(Beans)动态规划

题目要求选数和最大,选了这个数,这个数的上下两行和左右两个数就不能选了,不是上下左右那四个数。 那就先把每行的最大和(不相邻)算出来最为一个数,然后再同样的方法算一遍这几个数和最大,最后就是要求的和最大。 代码: #include #include int a[200010],b[200010]; int Max(int x,int y) { return x>y?x:y; }

小铅笔 464

Xftp卸载报错1628终极解决指南:深入解析InstallShield残留问题

本文深入解析了Xftp卸载时遇到的1628错误,其根源在于InstallShield安装引擎的残留问题。文章提供了从手动清理注册表项到彻底删除隐藏安装备份文件夹的完整解决方案,并给出了防患于未然的实用建议,帮助用户彻底解决这一经典安装报错。

weixin_29276847的博客 336

无迹卡尔曼滤波 (UKF, Unscented Kalman Filter) 算法详解及案例分析

无迹卡尔曼滤波是一种用于估计非线性系统状态的递归算法。其目标是通过结合系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2627

求数组非连续子序列的最大和

题目描述:1. 一个整数数组L,如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50])。测试例子:L=[-2,-3,3,50,1,-1,100] 。用动态规划的思想:public class ...

春华秋实 6928

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。

缘梦未来的博客 1841

HDU-2577 How to Type || HDU-2845 Beans

题目: 2道类型相似的dp。 HDU-2845 Beans: 题意: 给出一个二维数字矩阵,其中每个点存放着豆子,求出能够吃到的最大豆子数 要求:每吃一个格子里的豆子,这个格子两边的两格和上下两行都不能吃了。 思路: 每个点都只有吃或不吃两种状态,两个数组分别储存吃与不吃该点时的最优解。 求出每一行的最优解之后看作一列求整体最优解。 代码: #defin

MyWorld 485

《QGIS快速入门与应用基础》009:国内镜像源(清华大学/阿里云)下载技巧

针对国内用户下载QGIS速度慢、易中断的问题,推荐使用清华大学和阿里云两大国内镜像源,提供3-10MB/s的极速下载方案。详细解析镜像源核心优势、分步骤下载指南及校验方法,对比清华(同步快、北方优选)与阿里云(南方节点多)的特点。针对常见问题如版本延迟、404错误等提供解决方案,并介绍搭配IDM等工具实现多线程加速的进阶技巧。通过镜像源+下载工具组合,用户可高效获取QGIS安装包,为后续系统安装奠定基础。

LuckyHanMo的博客 1735

088、多摄像头跨镜目标追踪 ID 频繁切换?ReID 特征 + 轨迹关联 + 时间约束方案

文章摘要:本文针对多摄像头跨镜目标追踪中ID频繁切换的问题,提出了一种结合ReID特征、轨迹关联和时间约束的综合解决方案。作者分析了ID切换的三个主要原因:ReID特征不稳定、轨迹关联依赖最近邻匹配以及忽略时间约束。通过改进ReID特征提取(多层特征融合)、引入轨迹预测(卡尔曼滤波)和添加时间窗口约束,成功将ID切换率从35%降至3%以下。文章详细分享了实现细节和踩坑经验,为跨摄像头目标追踪提供了实用优化思路。

ai技术增长的博客 169

HDU 2845 Beans 行列dp

HDU 2845 Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3118    Accepted Submission(s): 1506 Problem Description Bean-ea

TaoSama's Microcosm 520

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

hdu 2845 Beans

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2845   题目描述:   Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime...

逍遥 315

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU 2845 Beans

Beans Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1819Accepted Submission(s): 921 Problem Description Bean-eating is an intere...

anvt77205的博客 136

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu2845_Beans

http://acm.hdu.edu.cn/showproblem.php?pid=2845 把每一行单独出来,如果取了x[i],那么x[i-1]和x[i+1]都不可以取。求这样应该如何取数使所取的数的总和最大? 对于每个数,有取和不取两个状态: b[i][

小小菜鸟蛋の小窝 987

HDU 2845 DP Beans

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2845 分析:题目意思就是不能有任何两个数在相邻的行和相邻的列中,先对某一行分析,如果先取了第1个数,则接下来可以取第3或4个数(因为求所有取的数之和最大,所以不可能一下跳过3个以上),如果先取第2个数,接下来可以取第4或5个数,依此类推...... 从这里可以观察到,当取到第4个数时,所有取出数的

PWZER 613

HDU2845 Beans

Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the ...

邵光亮的博客 749

hdu2845之Beans,DP

hdu2845之Beans,DP 2012-12-08 16:12 533人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载。 Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different q

Davenny:~我今天该吃点什么捏~ 337
上一篇: HDU 2577 How to Type
下一篇: HDU 2830 Matrix Swapping II
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值