news 2026/7/13 2:19:13

区间DP第2课:区间DP应用案例实践1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
区间DP第2课:区间DP应用案例实践1

区间DP第2课:区间DP应用案例实践1

题目描述

约翰经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱。为此,约翰购置了N NN1 ≤ N ≤ 2000 1 \leq N \leq 20001N2000) 份美味的零食来卖给奶牛们。每天约翰售出一份零食。当然约翰希望这些零食全部售出后能得到最大的收益,这些零食有以下这些有趣的特性:

  • 零食按照1 , … , N 1, \ldots, N1,,N编号,它们被排成一列放在一个很长的盒子里。盒子的两端都有开口,约翰每天可以从盒子的任一端取出最外面的一个。
  • 与美酒与好吃的奶酪相似,这些零食储存得越久就越好吃。当然,这样约翰就可以把它们卖出更高的价钱。
  • 每份零食的初始价值不一定相同。约翰进货时,第i份零食的初始价值为V i V_iVi1 ≤ V ≤ 1000 1 \leq V \leq 10001V1000)。
  • i ii份零食如果在被买进后的第a aa天出售,则它的售价是V i × a V_i \times aVi×a

V i V_iVi是从盒子顶端往下的第i ii份零食的初始价值。约翰告诉了你所有零食的初始价值,并希望你能帮他计算一下,在这些零食全被卖出后,他最多能得到多少钱。

输入格式

第一行一个正整数N NN

第二行N NN个正整数V 1 ∼ V N V_1 \sim V_NV1VN

输出格式

一行一个整数表示答案。

输入输出样例 1
输入 1
5 1 3 1 5 2
输出 1
43
说明/提示

样例的最优解是:按1 → 5 → 2 → 3 → 4 1 \to 5 \to 2 \to 3 \to 415234的顺序卖零食,得到的钱数是1 × 1 + 2 × 2 + 3 × 3 + 4 × 1 + 5 × 5 = 43 1 \times 1 + 2 \times 2 + 3 \times 3 + 4 \times 1 + 5 \times 5 = 431×1+2×2+3×3+4×1+5×5=43

方法思路

  1. 问题分析:每次出售零食时,可以选择从队列的头部或尾部取出,因此这是一个典型的区间动态规划问题。我们需要计算每个子区间的最大收益,并逐步合并这些结果来解决整个问题。

  2. 动态规划状态定义:定义dp[i][j]表示从第i个到第j个零食的区间内,能获得的最大收益。

  3. 状态转移方程:对于每个区间[i, j],当前出售的天数为a = n - (j - i),其中n是总天数。我们可以选择出售左端或右端的零食,并取最大收益:

    • 出售左端的收益为v[i] * a + dp[i+1][j]
    • 出售右端的收益为v[j] * a + dp[i][j-1]
      因此,状态转移方程为:dp[i][j] = max(v[i] * a + dp[i+1][j], v[j] * a + dp[i][j-1])
  4. 初始化:当区间长度为1时,直接计算该零食在第n天出售的价值。

  5. 计算顺序:按区间长度从小到大计算,逐步合并子区间的结果。

解决代码

#include<bits/stdc++.h>intv[2005];intdp[2005][2005];intmain(){intn;cin>>n;for(inti=1;i<=n;i++){cin>>v[i];}// 初始化长度为1的区间for(inti=1;i<=n;i++){dp[i][i]=v[i]*n;}// 处理长度从2到n的区间for(intlen=2;len<=n;len++){for(inti=1;i<=n-len+1;i++){intj=i+len-1;inta=n-(j-i);// 计算当前的天数dp[i][j]=max(v[i]*a+dp[i+1][j],v[j]*a+dp[i][j-1]);}}cout<<dp[1][n]<<endl;return0;}

代码解释

  1. 输入处理:读取零食数量n和每个零食的价值v[i]
  2. 初始化:对于每个长度为1的区间[i, i],其最大收益为当前零食在第n天的价值。
  3. 动态规划计算:按区间长度从小到大遍历,计算每个区间的最大收益。对于每个区间[i, j],计算当前天数a,并根据选择左端或右端的零食更新最大收益。
  4. 输出结果:最终结果存储在dp[1][n]中,表示整个区间[1, n]的最大收益。

完整系列资料,请查看专栏:《csp信奥赛C++动态规划》
https://blog.csdn.net/weixin_66461496/category_13096895.html

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 21:17:40

19、利用Scapy和Python进行网络数据包处理与扫描

利用Scapy和Python进行网络数据包处理与扫描 1. Scapy数据包捕获与重放 Scapy具备监听网络接口并捕获所有传入数据包的能力,它可以像tcpdump一样将数据包写入pcap文件。此外,Scapy还提供了读取和重放pcap文件的额外功能。 1.1 简单数据包重放 以下是一个简单的数据包重放…

作者头像 李华
网站建设 2026/7/12 1:36:58

性能测试里MySQL的锁

这篇文章我想来聊聊 MySQL 的锁是怎么加上的&#xff0c;为啥想聊这个呢&#xff1f;主要是因为业务中我们或多或少都会使用到锁&#xff0c;毕竟锁是保障我们数据安全性的关键法宝。但是由于不了解原理&#xff0c;往往可能导致我们在”刻意“或者”无意“的使用场景下&#x…

作者头像 李华
网站建设 2026/7/12 11:24:19

OBS教程:OBS实时字幕插件如何下载?直播字幕翻译怎么弄?

OBS教程&#xff1a;OBS实时字幕插件如何下载&#xff1f;直播字幕翻译怎么弄&#xff1f;直播实时翻译软件哪个好&#xff1f;OBS实时字幕插件官方下载地址 首先介绍一下OBS实时字幕插件支持哪些功能&#xff1a; 1、将主播所说的话显示为文字&#xff0c;逐字逐句实时显示字…

作者头像 李华
网站建设 2026/7/12 21:22:13

MagicTime: Time-Lapse Video Generation Models asMetamorphic Simulators论文精读(1)

T2V的最新进展在文本描述合成高质量的一般视频方面取得了显著成功&#xff0c;但是在T2V中有一个被忽视的问题&#xff1a;没有充分编码真实世界的物理知识&#xff0c;因此生成的视频往往运动会被限制&#xff0c;变化不佳。因此本文提出了一个变形延时视频生成模型&#xff0…

作者头像 李华
网站建设 2026/7/12 2:43:00

Laravel 13多模态表单处理:从入门到精通的6大实战场景,错过等于失业

第一章&#xff1a;Laravel 13多模态表单处理概述在现代Web应用开发中&#xff0c;表单不再局限于文本输入。Laravel 13 引入了对多模态数据的原生支持&#xff0c;允许开发者在一个请求中高效处理文本、文件、JSON结构体甚至流媒体数据。这一能力极大增强了表单处理的灵活性与…

作者头像 李华
网站建设 2026/7/12 18:29:55

读捍卫隐私03同步

1. 隐私预期1.1. expectation of privacy1.2. 隐私预期应该从传统的纸质信件时代扩展到数字时代1.3. 在美国&#xff0c;执法部门在没有得到收信人许可的情况下不能打开密封的实体信函1.4. 隐私预期是一种司法测试&#xff0c;用于确定美国宪法《第四修正案》声明的隐私保护是否…

作者头像 李华