首页 > 其他分享 >洛谷 P1651 塔(DP)

洛谷 P1651 塔(DP)

时间:2024-12-06 17:04:01浏览次数:7  
标签:洛谷 拼到 积木 int P1651 sum DP

题目传送门icon-default.png?t=O83Ahttps://www.luogu.com.cn/problem/P1651

解题思路

设 f(i,j) 表示前 i 个积木,两塔高度差为 j(第一个比第二个高多少),的最大高度。

易得:

首先,不选当前的积木:f(i,j)=f(i-1,j)

其次,选当前积木,将它拼到第一个塔上:f(i,j)=f(i-1,j-a_i)+a_i

最后,选当前积木,将它拼到第二个塔上:f(i,j)=f(i-1,j+a_i)

由于,第二维可能为负数,所以,我们可以以 sum(数组的总和)为 0 刻度线,去 DP。

同时,滚动数组优化空间……

代码

#include<bits/stdc++.h>
using namespace std;

int n,a[51],sum;
int f[2][1005001];
int ans=0;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	memset(f,-0x3f,sizeof f);
	f[0][sum]=0;
	for(int k=1;k<=n;k++)
	{
		int i=k%2;
		for(int j=0;j<=sum*2;j++)
		{
			f[i][j]=f[i xor 1][j];
			if(j-a[k]>=0)
				f[i][j]=max(f[i][j],f[i xor 1][j-a[k]]+a[k]);
			if(j+a[k]<=sum*2)
				f[i][j]=max(f[i][j],f[i xor 1][j+a[k]]);
			if(j==sum)
				ans=max(ans,f[i][j]);
		}
	}
	if(ans)
	cout<<ans;
	else
	cout<<-1;
	return 0;
}

标签:洛谷,拼到,积木,int,P1651,sum,DP
From: https://blog.csdn.net/2403_87021226/article/details/144222679

相关文章

  • 为WordPress网站优化性能的最佳CDN集成服务
    在数字化竞争激烈的今天,WordPress网站作为全球最受欢迎的内容管理系统之一,深受企业和个人的青睐。然而,随着网站流量和内容复杂性的增加,性能优化成为每一个站长的必修课。CDN(内容分发网络)集成服务无疑是提升WordPress网站加载速度和安全性的最佳工具之一。接下来一起看看WordP......
  • Profibus DP转Profinet网关解决称重仪表与西门子1200PLC的通讯案例
    一、案例背景客户现场有40多台ProfibusDP协议的称重。现需要把这些仪表统一接到西门子1200PLC上面,并进行实时监控。通过使用捷米特JM-DPM-PN网关将两边的设备进行连接。DP从站和西门子PLC配置完成后下载重启,读取参数后根据实时状态进行调试。二.设备介绍1.西门子12......
  • GESP一级必刷题 分支结构 P5713 洛谷团队系统
    【深基3.例5】洛谷团队系统题目描述在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间555分钟;而在洛谷团队中上......
  • 洛谷题单指南-线段树-P6492 [COCI2010-2011#6] STEP
    原题链接:https://www.luogu.com.cn/problem/P6492题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。解题思路:序列支持单点修改(0->1,1->0),区间查询(最长不连续0、1长度),因此可以采用线段树,不需要懒标......
  • 利用断开的域管理员RDP会话提权
    前言当域内管理员登录过攻击者可控的域内普通机器运维或者排查结束后,退出3389时没有退出账号而是直接关掉了远程桌面,那么会产生哪些风险呢?有些读者第一个想到的肯定就是抓密码,但是如果抓不到明文密码又或者无法pth呢?通过计划任务完成域内提权首先模拟域管登录了攻击者可控的普......
  • 洛谷二刷P4715 【深基16.例1】淘汰赛(c嘎嘎)
    题目链接:P4715【深基16.例1】淘汰赛-洛谷|计算机科学教育新生态题目难度:普及 刷题心得:本题是我二刷,之前第一次刷是在洛谷线性表那个题单,当时印象深刻第 一篇题解是用的树来做,当时我不屑一顾(觉得花里胡哨),现在我开始刷树的题目着字分析,第一次学习到线性树的用法现......
  • DP1332E资产监控管理方案
    DP1332E芯片的资产管理方案,帮助企业实现资产的高效管理和安全保障。系统组成:DP1332ENFC模块:负责近场通信的发起和接收,是系统的核心部件。微控制器(MCU):用于整体系统的控制,包括与DP1332E的通信、数据处理以及与其他模块的交互。天线:DP1332E通过天线与外部NFC标签或设备进行无线......
  • 期望DP——解决从自身转移的情况
    期望DP——解决从自身转移的情况问题背景可以进行若干次抽奖,每一次分别获得\(0-k\)个物品的概率\(p_j\)都是确定的,给定一个\(X\),求抽到\(X\)个物品的期望抽奖次数。如果定义\(f_i\)为获得\(i\)个物品的期望次数,那么这个转移方程也是十分显然:\[f_i=1+\sum_{j=0}^kf......
  • .NET Core 线程池(ThreadPool)底层原理浅谈
    https://www.cnblogs.com/lmy5215006/p/18566995 文提到,创建线程在操作系统层面有4大无法避免的开销。因此复用线程明显是一个更优的策略,切降低了使用线程的门槛,提高程序员的下限。.NETCore线程池日新月异,不同版本实现都有差别,在.NET6之前,ThreadPool底层由C++承载。在之后......
  • 洛谷题单指南-线段树-P1471 方差
    原题链接:https://www.luogu.com.cn/problem/P1471题意解读:给定序列a[n],支持三种操作:1.将区间每个数加上一个数2.查询区间的平均数3、查询区间的方差解题思路:要支持区间修改和查询,首选线段树,下面看线段树节点需要维护的信息平均数=区间和/n,所以第一个要维护的信息是区间和......