【无标题】2024.6.6

2024.6.6 【一天高考!!! “夏天周而复始、该相逢的人会再相逢”】

Thursday 五月初一


<theme = oi-“DP”>

来学习一下DP的优化

其实考试时我应该很难用到优化的

P2569 [SCOI2010] 股票交易

DP柿子比较好推,

T,Maxp都比较小,

作为f数组的两维还是挺合理的。

那么设f[i][j]为第i天,有j张票的最大价值

没票时买 f [ i ] [ j ] = − a p [ i ] ∗ j ( 0 ≤ j ≤ a s [ i ] ) 不参与买卖 f [ i ] [ j ] = m a x ( f [ i ] [ j ] , f [ i − 1 ] [ j ] ) ( 0 ≤ j ≤ M a x p ) 买 f [ i ] [ j ] = m a x ( f [ i ] [ j ] , f [ i − w − 1 ] [ k ] − ( j − k ) ∗ a p [ i ] ) ( j − a s [ i ] ≤ k < j ) 卖 f [ i ] [ j ] = m a x ( f [ i ] [ j ] , f [ i − w − 1 ] [ k ] + ( k − j ) ∗ b p [ i ] ) ( j < k ≤ j + b s [ i ] ) 没票时买\\ f[i][j]\ = \ -ap[i] * j\\ (0 \le j \le as[i])\\ 不参与买卖\\ f[i][j]\ = \ max(f[i][j],f[i-1][j])\\ (0 \le j \le Maxp)\\ 买\\ f[i][j]\ = \ max(f[i][j],f[i-w-1][k]-(j-k)*ap[i])\\ (j-as[i] \le k < j)\\ 卖\\ f[i][j]\ = \ max(f[i][j],f[i−w−1][k]+(k−j)*bp[i])\\ (j < k \le j+bs[i])\\ 没票时买f[i][j] = ap[i]j(0jas[i])不参与买卖f[i][j] = max(f[i][j],f[i1][j])(0jMaxp)f[i][j] = max(f[i][j],f[iw1][k](jk)ap[i])(jas[i]k<j)f[i][j] = max(f[i][j],f[iw1][k]+(kj)bp[i])(j<kj+bs[i])

然后就可以利用单调队列优化了

单调队列

//2024.6.6
//by white_ice
//[SCOI2010] 股票交易 | P2569
#include<bits/stdc++.h>
//#include"fopen.cpp"
using namespace std;
#define itn int
constexpr int oo = 2003;int jntm(itn a,int b){return a>b?a:b;}
int ngm (itn a,int b){return a<b?a:b;}int t,p,w;
int ap[oo],bp[oo],as[oo],bs[oo];
int f[oo][oo];itn stk[oo];int main(){//fre();ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin >> t >> p >> w;memset(f,128,sizeof(f));for (itn i=1;i<=t;i++)cin >> ap[i] >> bp[i] >> as[i] >>bs[i];// for (int i=1;i<=t;i++){//     for (itn j=0;j<=as[i];j++)//         f[i][j] = -1*j*ap[i];//     for (itn j=0;j<=p;j++)//         f[i][j] = jntm(f[i][j],f[i-1][j]);//     if (i<=w)//         continue;//     int l,r;//     l = 1;r = 0;//     for (itn j=0;j<=p;j++){//         while (l<=r&&stk[l]<j-as[i])//             l++;//         while (l<=r&&f[i-w-1][stk[r]]+stk[r]*ap[i]<=f[i-w-1][j]+j*ap[i]);//                   //f[i-w-1][stk[r]]+stk[r]*ap[i]<=f[i-w-1][j]+j*ap[i]//             r--;//         stk[++r] = j;//         if (l<=r)//             f[i][j] = jntm(f[i][j],f[i-w-1][stk[l]]+stk[l]*ap[i]-j*ap[i]);//     }                            //f[i-w-1][stk[l]]+stk[l]*ap[i]-j*ap[i]//     l = 1,r = 0;//     for (itn j=p;j>=0;j--){//         while (l<=r&&stk[l]>j+bs[i])//             l++;//         while (l<=r&&f[i-w-1][stk[r]]+stk[r]*bp[i]<=f[i-w-1][j]+j*bp[i])//                    //f[i-w-1][stk[r]]+stk[r]*bp[i]<=f[i-w-1][j]+j*bp[i]//             r--;//         stk[++r] = j;//         if (l<=r)//             f[i][j] = jntm(f[i][j],f[i-w-1][stk[l]]+stk[l]*bp[i]-j*bp[i]);//                                  //f[i-w-1][stk[l]]+stk[l]*bp[i]-j*bp[i]//     }// }for(int i=1;i<=t;i++){cin >> ap[i] >> bp[i] >> as[i] >> bs[i];for(int j=0;j<=as[i];j++)f[i][j] = -1*j*ap[i]; for(int j=0;j<=p;j++)f[i][j] = jntm(f[i][j],f[i-1][j]); if(i<=w)continue;    int l,r;l = 1 , r = 0;for(int j=0;j<=p;j++){while(l<=r&&stk[l]<j-as[i])l++; while(l<=r&&f[i-w-1][stk[r]]+stk[r]*ap[i]<=f[i-w-1][j]+j*ap[i])r--; stk[++r] = j; if (l<=r)f[i][j] = jntm(f[i][j],f[i-w-1][stk[l]]+stk[l]*ap[i]-j*ap[i]); }l = 1 , r = 0;for(int j=p;j>=0;j--){while(l<=r&&stk[l]>j+bs[i])l++;while(l<=r&&f[i-w-1][stk[r]]+stk[r]*bp[i]<=f[i-w-1][j]+j*bp[i])r--;stk[++r] = j;if(l <= r)f[i][j] = jntm(f[i][j],f[i-w-1][stk[l]]+stk[l]*bp[i]-j*bp[i]); }}int out =  -0x3f3f3f3f;for (itn i=0;i<=p;i++)out = jntm (out,f[t][i]);cout << out;return 0;
}

对于一个dp方程

如果,dp[i] = i相关项+j相关项(0<=j<=i)

就可以使用单调队列了

单调队列优化

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

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

相关文章

I2C通信外设

I2C外设介绍 主机&#xff0c;就是拥有主动控制总线的权利。从机&#xff0c;只能在从机允许的情况下&#xff0c;才能控制总线。 多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上&#xff0c;有2个或2个以上固定的主机&#xff0c;上面固定为主机&#xff0c;下…

【Unity | Editor强化工具】资产快速访问工具

经常在Project窗口中翻找资产相对麻烦&#xff0c;Unity自带的Favorite功能又和Project窗口强绑定&#xff0c;且只能在双列视图下使用&#xff0c;故制作了一个可以在独立窗口中列举常用资产的小工具&#xff1a; Unity Asset Quick Access 。 CSDN弄了个Github加速计划&…

在敏捷项目中如何使用WBS?

工作分解结构 (WBS) 是管理规划、监控和控制项目或计划范围的关键要素&#xff0c;在项目管理的许多不同分支中都有应用。它的主要目的是将复杂的项目分解成更易于管理的小块&#xff0c;通常以简单的流程图形式呈现。 WBS 通常与瀑布法等传统项目管理方法相关联&#xff0c;在…

教你申请永久免费的 us.kg 域名 支持接入 Cloudflare

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 之前的永久免费域名 eu.org 已经很久没有审批新的域名了&#xff0c;今天给大家推荐的 us.kg 不需要审批&#xff0c;注册账号申请域名后直接可以使用&#xff0c;并且它也可以像 eu.org 一样接入 Cloudfl…

2024中国机器人开发大会

具身智能 『 具有身体的智能 』 忘了是谁 小脑大模型&#xff1a;运动&#xff1b;大脑大模型&#xff1a;认知&#xff1b; 机器人操作系统 | 黄晓庆 云端&#xff0c;机器人的大脑&#xff0c;每个人的数字化&#xff0c;人类的第三台计算机&#xff1b;每个人生产力的提…

联合(union)和枚举(enum)学习(c语言)

前言 Hello,亲爱的小伙伴们&#xff0c;好久不见&#xff0c;今天我们继续来学习新的内容-----联合和枚举 如果喜欢作者菌的文章的话&#xff0c;就不要吝啬手中的三连呀&#xff0c;万分感谢&#xff01;&#xff01; 联合&#xff08;共用体&#xff09;&#xff08;union&…

【计算机网络】计算机网络的组成与功能

计算机网络的组成与功能 导读一、计算机网络的组成1.1 从组成方式上1.1.1 硬件1.1.2 软件1.1.3 协议 1.2 从工作方式上1.3 从功能组成上 二、计算机网络的功能2.1 数据通信2.2 资源共享2.3 分布式处理2.4 提高可靠性2.5 负载均衡2.6 其它 结语 导读 大家好&#xff0c;很高兴又…

【python基础篇】 5. python 异常、文件与流

1 异常 错误&#xff1a;语法错误&#xff08;一般IDE能够发现&#xff09;&#xff0c;逻辑错误&#xff08;很难发现&#xff0c;提示起来比较麻烦&#xff09; 异常&#xff1a;当python检测到一个错误时&#xff0c;解释器无法继续执行下去&#xff0c;于是抛出相应的信息…

Web3开发框架分析

Web3开发框架旨在简化区块链和去中心化应用&#xff08;DApp&#xff09;的开发过程&#xff0c;为开发者提供必要的工具和库。以下是一些主要的Web3开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Truffle Suite Truffl…

$MPC 登录MEXC,加速Partisia Blockchain 生态市场进程

Partisia Blockchain是一个以MPC技术方案为基础&#xff0c;具备可审计特性的隐私Layer1生态&#xff0c;与此同时&#xff0c;该链通过系列创新的系统架构&#xff0c;能够兼顾高迸发、安全、可拓展性以及可互操作特性。基于系列技术特性&#xff0c;Partisia Blockchain正在构…

OrangePi KunPengPro | linux系统下挂载U盘

OrangePi KunPengPro | linux系统下挂载U盘 时间&#xff1a;2024年6月6日21:32:53 文章目录 OrangePi KunPengPro | linux系统下挂载U盘1.参考2.操作fdisk -l 列出系统上所有磁盘的分区表信息将 /dev/sda1 分区挂载到 /mnt/udisk/ 目录显示文件系统的磁盘空间使用情况卸载文件…

RAG检索增强生成(1)-大语言模型的外挂数据库

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks Lewis P, Perez E, Piktus A, et al. Retrieval-augmented generation for knowledge-intensive nlp tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459-9474. RAG结合了信息检…

python中B.py调用A.py中所有方法,该怎么导入呢

函数调用 python中B.py调用A.py中所有方法&#xff0c;该怎么导入呢1. 确保A.py和B.py在同一目录2. 在A.py中定义一些方法3. 在B.py中导入A.py并调用其方法4. 运行B.py详细解释额外提示 2 采用from A.py import *是否可行1. 确保A.py和B.py在同一目录2. 在A.py中定义一些方法3.…

Java数据结构与算法(最长回文子串动态规划)

前言 动态规划主要用于解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题来解决复杂问题&#xff0c;每个子问题仅解决一次&#xff0c;并将其结果存储&#xff0c;以供后续使用&#xff0c;从而避免了重复计算。 动态规划的基本思想 分解问题&#xff1…

C++入门 ros服务通信

一、 开发环境 ubuntu20.04 ros版本noetic 参考视频 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p52&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 编写srv文件 在功能包下面创建srv文件夹…

【SpringBoot + Vue 尚庭公寓实战】项目初始化准备(二)

尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09; 文章目录 尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09;1、导入数据库2、创建工程3、项目初始配置3.1、SpringBoot依赖配置3.2、创建application.yml文件3.3、创建…

【Linux取经路】网络套接字编程——TCP篇

文章目录 前言十、Tcp Server 端代码10.1 socket、bind10.1 listen——监听一个套接字10.2 accept——获取一个新连接10.3 read——从套接字中读取数据10.4 write——向套接字中进行写入10.5 Tcp Service 端完整代码&#xff08;单进程版&#xff09;10.6 Tcp Server 端代码&am…

MySQL 8.0中查询缓存的废弃与原因分析

MySQL 8.0中查询缓存&#xff08;Query Cache&#xff09;的废弃与原因分析 引言 尽管MySQL的查询缓存&#xff08;Query Cache&#xff09;最初设计目的是为了提升性能&#xff0c;但因其存在严重的可扩展性问题和易成为系统瓶颈&#xff0c;MySQL在8.0版本中正式移除了这一…

这个世界,对于心态好的人,就是个大游乐场,越刺激越好玩。对于胆小鬼,那就是地狱,随时随地都会受伤

心态决定你的世界&#xff1a;游乐场还是地狱 在这个充满变数的世界里&#xff0c;我们的心态决定了我们看待世界的方式。对于心态积极的人来说&#xff0c;世界就像一个巨大的游乐场&#xff0c;每一个挑战都是一个新的游戏&#xff0c;每一个刺激都是乐趣的一部分。而对于那…

解决跨域的几种方法

解决跨域的方法主要有以下几种&#xff1a; 1.CORS&#xff08;跨域资源共享&#xff09; CORS是一种W3C规范&#xff0c;它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。 服务器通过设置响应头Access-Control-Allow-Origin来允许或拒绝跨域请求。例如&#xf…