「题解」P5858 「SWTR-03」Golden Sword

洛谷 P5858 Golden Sword题解 目录题面前置知识题解分析AC Code 题面 传送门 制造一把金宝剑需要nnn种原料,编号为111到nnn,编号为iii的原料的坚固值为aia_iai​。 炼金是很讲究放入原料的顺序的,因此小E必须按照111到nnn的顺序依次将这些原料放入炼金锅。 但是,炼金锅的容量非常有限,它最多只能容纳www个原料。 所幸的是,每放入一个原料之前,小E可以从中取出一些原料,数量不能超过sss个。 我们定义第iii种原料的耐久度为:放入第iii种原料时锅内的原料总数 × ai\times\ a_i×  阅读详情

题目背景

小E不幸在一场战斗中失去了他的金宝剑。

题目描述

制造一把金宝剑需要n种原料,编号为1到n,编号为i 的原料的坚固值为ai​。炼金是很讲
究放入原料的顺序的,因此小E必须按照1到n的顺序依次将这些原料放入炼金锅。但是,
炼金锅的容量非常有限,它最多只能容纳w个原料。所幸的是,每放入一个原料之前,小
 E可以从中取出一些原料,数量不能超过s个。我们定义第 i 种原料的耐久度为:放入第
 i种原料时锅内的原料总数*ai​,则宝剑的耐久度为所有原料的耐久度之和。小E当然想让
 他的宝剑的耐久度尽可能得大,这样他就可以带着它进行更多的战斗,请求出耐久度的
 最大值。

输入格式

第一行,三个整数 n,w,sn,w,sn,w,s。
第二行,nnn 个整数 a1,a2,…,ana_1,a_2,\dots,a_na1​,a2​,…,an​。

输出格式

一行一个整数,表示耐久度的最大值。

输入输出样例

输入
5 3 3
1 3 2 4 5
输出
40
题解
读完题,我们可以想到:
1. 已经放入锅中的材料没有本质上的区别,对后面放入材料的贡献都为1。
2. 加入新物品后,锅中材料数为j,可在材料数为j-1直接加入,或取出s个材料。
故此,定义f[i,j]表示,放到第i个物品,箱子里有j个元素的最大价值和。
状态转移方程:

f[i,j]=max⁡k=1→max(1,j−s)f[i−1][j−1]+a[i]∗k\max\limits_{k=1\rightarrow max(1,j-s)} f[i-1][j-1]+a[i]*kk=1→max(1,j−s)max​f[i−1][j−1]+a[i]∗k( i→\rightarrow→n,j→\rightarrow→ min(m+1,i))。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, m, s;
int a[5005];
long long f[5005][5005];
int main() {
	long long ans = -0x3f3f3f3f3f3f;
    scanf("%d %d %d", &n, &m, &s);
    for(int i = 1; i <= n; i++) {
    	scanf("%d", &a[i]);
	}
	memset(f, -0x3f, sizeof(f));
    f[0][0] = 0;
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= m + 1 && j <= i; j ++) {
            for(int k = j; k >= 1 && k >= j - s; k --) {
                if (f[i][k] <= f[i - 1][j - 1] + a[i] * k) {
                	f[i][k] = f[i - 1][j - 1] + a[i] * k;
				}
            }
		}
	}
    for (int i = 1; i <= m; ++ i) {
        ans = max(ans, f[n][i]);
	}
    printf("%lld", ans);
}

然而时间复杂度为O(n3),空间复杂度为O(n2)在这里插入图片描述时间复杂度可由单调队列实现(但我似乎不会)
而空间复杂度可用滚动数组
滚动数组

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, m, s;
int a[5005];
long long f[2][5005];
int main() {
	long long ans = -0x3f3f3f3f3f3f;
    scanf("%d %d %d", &n, &m, &s);
    for(int i = 1; i <= n; i++) {
    	scanf("%d", &a[i]);
	}
	memset(f, -0x3f, sizeof(f));
    f[0][0] = 0;
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= m + 1 && j <= i; j ++) {
            for(int k = j; k >= 1 && k >= j - s; k --) {
                if (f[i & 1][k] <= f[(i - 1) & 1][j - 1] + a[i] * k) {
                	f[i & 1][k] = f[(i - 1) & 1][j - 1] + a[i] * k;
				}
            }
		}
	}
    for (int i = 1; i <= m; ++ i) {
        ans = max(ans, f[n & 1][i]);
	}
    printf("%lld", ans);
}

单调队列

#include <cstdio>
#include <algorithm>
using namespace std;
long long q[5555], n, w, s, a[5555], dp[2][5555], row = 1, ans = -1e15;
int main()
{
    scanf("%lld%lld%lld", &n, &w, &s);
    for (int i = 1; i <= n; i++) scanf("%lld", a + i);
    for (int i = 0; i <= 1; i++)
        for (int j = 0; j <= w; j++)
            dp[i][j] = -1e15;
    dp[0][0] = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j <= w; j++)
            dp[row][j] = -1e15;
        int h = 1, t = 1;
        q[h] = w;
        for (int j = w; j >= 1; j--)
        {
            while (h <= t && q[h] > min(w, j + s - 1)) h++;
            while (h <= t && dp[row ^ 1][q[t]] < dp[row ^ 1][j - 1]) t--;//单点队列。
            q[++t] = j - 1;
            dp[row][j] = dp[row ^ 1][q[h]] + j * a[i];
        }
        row ^= 1;//变成另外一行
    }
    for (int i = 0; i <= w; i++)
        ans = max(ans, dp[n & 1][i]);//n奇偶不同最后一行的位置就不同。
    printf("%lld\n", ans);
}
————————————————
版权声明:本文为优快云博主「煜明」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_45646006/article/details/105314103

后面的代码是直接复制过来的,希望大家不要嘲讽介意
我只是过来提个思路罢了

影音先锋视频播放器 专业视频播放工具,无毒,请放心下载使用。 立即下载

相关推荐

bt 种子文件解析工具

解析bt 种子文件的一个小工具,有兴趣的可以看下,大家共同进步和交流。我的QQ:110207457

[线性dp][单调队列]Golden Sword 洛谷P5858

题目背景 小 E 不幸在一场战斗中失去了他的金宝剑。 题目描述 制造一把金宝剑需要n种原料,编号为1到n,编号为i的原料的坚固值为 ai​。 炼金是很讲究放入原料的顺序的,因此小 E 必须按照1到n的顺序依次将这些原料放入炼金锅。 但是,炼金锅的容量非常有限,它最多只能容纳w个原料。 所幸的是,每放入一个原料之前,小 E 可以从中取出一些原料,数量不能超过s个。 我们定义第i种原料的耐久度为:放入第i种原料时锅内的原料总数(包括正在放入的原料) ×ai​...

Cloth的博客 585

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

5个可遇不可求的资源网站 赶紧收藏起来

还在为到处寻找资源而烦恼吗,今天我来和大家分享几款资源超多的网站,不管是影视、动漫,还是学习资源,都应有尽有。一起来看一下吧。 1、搬运工 可以说这是小编比较常用的影视资源网站了,可以说很多新上的影视资源,它里边比较迅速就有了,当然他也有各种类型的资源,不只是影视资源哦! 2、家里蹲大学 号称中国最大的教育视频网站,名字就是这么霸气,别的不说,先看一看网站主页的目录:计算机、经管、法学、外语、理...

doublerich的博客 1万+

多时间尺度源储荷微电网协调调度+日前日内实时+需求响应——附代码

为提高区域电网新能源消纳率,使电力系统运行成本最小,提高电力系统供电可靠性。提出考虑特性分布的储能电站接入的电网多时间尺度“源–储–荷”协调调度策略。综合储能电站、负荷侧各类需求响应资源的多时间尺度特性制定日前调度计划,并通过日内滚动与实时修正实现对预测数据更高精度的保证。以系统运行成本、弃风惩罚成本、失负荷惩罚成本为目标函数,建立多时间尺度调度模型。最后通过 MATLAB 平台调用商用软件包 CPLEX 完成混合整数规划优化,结果表明该调度策略可以达到系统运行成本最优,降低弃风率的效果。

不定时分享电力优化、神经网络、数学建模等技术等 6386

避开STM32中断优先级配置的坑:HAL_NVIC_SetPriority()参数你真的用对了吗?

本文深入解析STM32中断优先级配置中的关键问题,重点剖析HAL_NVIC_SetPriority()函数的正确使用方法。通过实际案例揭示优先级分组设置、抢占优先级与子优先级的区别,提供多中断系统中的优化策略和调试技巧,帮助开发者避免常见配置错误,提升系统稳定性。

weixin_42532938的博客 421

Chrome 无法正常打开站点

问题描述:通过花生壳转发的域名在Chrome上无法打开,但是Firefox等可以正常打开。 目前显示的错误为如下两种:DNS_PROBE_FINISHED_NXDOMAIN ERR_NAME_NOT_RESOLVED

chritina的专栏 2910

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 342

洛谷 P5858 「SWTR-03」Golden Sword

Description 制造一把金宝剑需要 nnn 种原料,编号为 111 到 nnn,编号为 iii 的原料的坚固值为 aia_iai​。 炼金是很讲究放入原料的顺序的,因此小 E 必须按照 111 到 nnn 的顺序依次将这些原料放入炼金锅。 但是,炼金锅的容量非常有限,它最多只能容纳 www 个原料。 所幸的是,每放入一个原料之前,小 E 可以从中取出一些原料,数量不能超过 sss 个。 我们定义第 iii 种原料的耐久度为:放入第 iii 种原料时锅内的原料总数(包括正在放入的原料) ×ai\ti

weixin_45812280的博客 1806

USB HID虚拟电池:Windows零驱动电源状态模拟方案

虚拟电池是一种在硬件测试与功耗分析中替代真实电池、实现可控电源状态注入的关键技术。其核心原理是通过标准USB HID协议(特别是UPS设备类)向操作系统上报可编程的AC/DC状态、剩余电量、容量参数等,绕过内核驱动限制,达成毫秒级响应与跨Windows版本兼容。该技术显著提升SoC能效验证、电池健康度校准及低电量行为触发等场景的可重复性与精度。本文基于CH554微控制器实现符合HID UPS规范的物理层虚拟电池设备,支持零驱动安装、USB原生识别与实时参数调控,适用于笔记本平台功耗建模、电源管理策略验证及自

weixin_35755188的博客 354

【WILEY】wiley期刊投稿详解:从revision到Accepted全流程实例讲解

注意:包括没标注修改位置的word文件和标注了修改位置的word文件。

Everyday try to become better -Kobe Bryant 1万+

洛谷P5858 「SWTR-03」Golden Sword 题解

「SWTR-03」Golden Sworddescription:制造一把金宝剑需要 种原料,编号为 到 ,编号为 的原料的坚固值为 。炼金是很讲究放入原料的顺序的,因此小 E 必须按照 到 的顺序依次将这些原料放入炼金锅。但是,炼金锅的容量非常有限,它最多只能容纳 个原料。所幸的是,每放入一个原料之前,小 E 可以从中取出一些原料,数量不能超过 个。我们定义第 种原料的耐久度...

ShineEternal的笔记小屋 594

智能车实战——极速越野组GPS与惯导融合定位导航全解析

本文深入解析了智能车极速越野组中GPS与惯导模块的融合定位导航技术。通过对比GPS的全局定位与惯导的高频姿态感知,详细阐述了如何利用MM32SPN27主控,将两者数据融合以实现精准、实时的车辆控制。内容涵盖硬件选型、软件数据处理、PID控制及系统调试等实战环节,为智能车开发者提供了一套完整的解决方案。

pz8901234的博客 1204

洛谷 P5858 「SWTR-03」Golden Sword 题解

题目地址 设dp[i][j]dp[i][j]dp[i][j]表示放入前iii个物品且锅中还有jjj个物品所获得的最大耐久度。 很容易推出dp[i][j]=Maxk=j−1k≤min(j+s−1,w)dp[i][j]=Max_{k=j-1}^{k \le min(j+s-1,w)}dp[i][j]=Maxk=j−1k≤min(j+s−1,w)​{dp[i−1][k]dp[i-1][k]dp[i−1]...

woshidalaocxy的博客 695

YOLO26跨时代升级!YOLO26 MLCA注意力机制解读

摘要: 本文提出了一种基于多级上下文聚合(MLCA)注意力机制的改进卷积神经网络。MLCA模块通过局部和全局注意力机制动态调整特征图权重,结合了ECA注意力与自适应池化,显著提升特征表达能力。实验表明,添加MLCA后模型mAP提升12.11,准确率提高5.43。文中详细解析了MLCA1模块的工作原理,包括局部/全局池化、卷积操作和注意力加权机制,并介绍了集成MLCA的Bottleneck_MLCA模块。该机制通过多层次特征融合,在保持计算效率的同时增强模型对关键特征的敏感性。最后提供了YOLOv26-MLC

m0_71589036的博客 283

使用 Python 爬取 Wikipedia 数据:抓取百科条目及其内容

维基百科的 API 提供了一些方便的接口,通过这些接口,我们可以轻松获取到维基百科的条目、类别、图片和其他相关信息。维基百科的 API 主要是基于 HTTP 请求的,通过向特定的 URL 发送 GET 请求来获取信息。:获取指定条目的内容。在本博客中,我们介绍了如何使用 Python 爬取维基百科的条目数据。通过使用 Wikipedia API 和网页抓取技术,我们能够高效地获取条目内容,并将其存储和分析。希望本篇教程能帮助你深入理解如何抓取和处理维基百科的数据。

2201_76125261的博客 475

[luogu] P5858「SWTR-03」Golden Sword

题目详情 题目分析: 这里的第一种方法有一种剪枝的思想。这个方法是由上一层枚举下一层,在每一次枚举中如果遇到比下一层这个数还要大,说明这个数已经被上一层前面数枚举过了,而且这个数字比当前这个数还要大,所以就没有继续枚举的必要率了,直接退出。 #include <cstdio> #include <algorithm> #define MIN -0x3f3f3f3f3f3f ...

yym68686 332

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

luogu P5858 「SWTR-03」Golden Sword

题面传送门 看到这道题,暴力应该是很好打的,爆搜出放一件物品前要拿走多少,然后就记忆化出dpdpdp了:设fi,jf_{i,j}fi,j​为放到第iii个物品,锅内加上当前还有jjj件物品的最大总和,那么状态转移方程应该是fi,j=max(fi,k+ai∗j)f_{i,j}=max(f_{i,k}+a_i*j)fi,j​=max(fi,k​+ai​∗j),其中kkk表示没有拿走<s<s...

fxt275307894a的博客 426

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[洛谷P5858-金剑Golden Sword]动态规划,单调队列题解

动态规划解决洛谷P5858金剑问题,通过双端队列单调队列优化时间复杂度

Headphone_Sang的博客 631

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

网址大全

部署企业级微服务: JSON 在线格式化:https://www.json.cn/ ICON http://www.fontawesome.com.cn/ https://tool.lu/favicon/ /node_modules/@mdi/font/preview.html https://www.iconfont.cn/search/index?q=Oauth Jenkins 插件下载:http://updates.jenkins-ci.org/download/plugins/

技术吐槽中心 1326

还在忍受磁力搜索网站不忍直视的广告么?18年最新最好用的bt磁力搜索网站介绍

之前写过一篇推荐没有弹出广告并很少种子搜索网站的文章,结果过了一段时间发现我写文章的时候开了广告过滤器,难怪看不到广告,把一些有弹出广告的网站也推荐上去了,直接被打脸Σ(lliд゚ノ)ノ。所以我只好重新写一篇,推荐的文章(&gt;_&lt;)。1.bt大陆 https://www.btdalu.com首先推荐bt大陆,弹出广告没有,广告几乎没有用户体验非常出色综合体验5颗星2.bt177 http...

qq_42700060的博客 13万+

leetcode 888. Fair Candy Swap 题解【Weekly Content 98 I】

888. Fair Candy Swap Description: Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Alice has, and B[j] is the size of the j-th bar of candy that Bob has...

weixin_34032779的博客 226

mysql子查询语句中ANY、SOME、ALL关键字的使用

原文 https://blog.youkuaiyun.com/IMW_MG/article/details/78383787?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.cha...

weixin_42446078的博客 592

85php.com,php85.com服务器iP

2020-11-27-----2021-03-02119.147.4.332020-10-11-----2020-11-2749.51.77.1362020-11-27-----2020-11-2749.51.79.2542020-06-20-----2020-09-20119.45.69.432020-06-20-----2020-09-20109.244.161.1752020-07-23--...

weixin_42679995的博客 1317

洛谷 Golden Sword(dp,优先队列优化【含板子】)|| 补充练习:洛谷 跳房子

题目链接: 「SWTR-03」Golden Sword - 洛谷 思路: 设表示放第i个原料,锅里共有 j 个时的耐久度之和。 容易知道dp方程为,其中 这样就可以写出暴力dp的代码如下:(需要枚举i,j,k,复杂度为O(nws),所以TLE了) #include <bits/stdc++.h> using namespace std; #define int long long /* 我们定义第i种原料的耐久度为: 放入第 i 种原料时锅内的原料总数(包括正在放入的原料)*

bunny_1024的博客 527

网站为什么突然访问不了?要如何解决?

很多用户在浏览网页的时候通常会遇到过网站打不开的现象,那么遇到网站打不开是什么原因呢?网站打不开又要如何解决?下面小编就带大家一起来看看。

2301_77388529的博客 1万+
下一篇: 「题解」「BZOJ4300」绝世好题
cqbz_tanhaoran
博客等级 码龄7年 30粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值