G - Merchant Takahashi / F - Useless for LIS
G - Merchant Takahashi
首先考虑暴力 DP。
设最后一步走到编号 ii 的城镇的方案的最大收益为 fifi,则每次集市相当于是 fTi←fj−C∣Ti−j∣+Pi(1≤j≤n)。
这样每次可以通过枚举 j 来转移,这样总时间复杂度是 O(nm) 的,无法通过。
考虑优化 DP,先拆绝对值,把转移分为以下两类:
-
fTi←fj−C(Ti−j)+Pi(1≤j≤Ti),即 fTi←(fj+C⋅j)+(−C⋅Ti+Pi)。
注意到后面部分是定值而前面部分与 i 无关,j 的取值范围又是一段前缀,所以我们用树状数组维护 fj+C⋅j 的前缀最大值。
-
ffTi←fj−C(j−Ti)+Pi(Ti≤j≤n),即 fTi←(fj−C⋅j)+(C⋅Ti+Pi)。
同理我们用树状数组维护 fj−C⋅j 的后缀最大值。怎样用树状数组维护后缀信息?只需交换两个循环循序即可。
然后我们把 fTi 插入到树状数组的Ti 位置去。
初始状态为 f1=0,最后答案为 最大的f i。注意代码中的 fifi 表示的是上文的 fTi.
代码:
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define all(v) v.begin(),v.end()
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f;
const int N = 2e5+5;
int n,m,c;
int dp[N];
int v[N],w[N];
int tr1[N];//求小于等于x的最大值
int tr2[N];//求大于等于x的最大值int lowbit(int x){return x&(-x);
}void add1(int x,int c){for(int i=x;i<=n;i+=lowbit(i)){tr1[i] = max(tr1[i],c);}return;
}int ask1(int x){int res = -inf;for(int i=x;i>=1;i-=lowbit(i)){res = max(res,tr1[i]);}return res;
}void add2(int x,int c){for(int i=x;i>=1;i-=lowbit(i)){tr2[i] = max(tr2[i],c);} return;
}int ask2(int x){int res = -inf;for(int i=x;i<=n;i+=lowbit(i)){res = max(res,tr2[i]);}return res;
}void solve(){cin>>n>>c;cin>>m;memset(tr1,-0x3f3f3f,sizeof(tr1));memset(tr2,-0x3f3f3f,sizeof(tr2));add1(1,c);add2(1,-c);dp[0] = 0;int ans = 0;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;int t = ask1(x) + (y-c*x);int tt = ask2(x) + (y+c*x);dp[i] = max(t,tt);ans = max(ans,dp[i]);add1(x,dp[i]+c*x);add2(x,dp[i]-c*x);}cout<<ans<<"\n";}signed main(){int T=1;//cin>>T;while(T--){solve();}return 0;
}
F - Useless for LIS
双倍经验:
算法依旧是树状数组加dp,f [ i ]表示前缀的最大长度,g [ i ] 表示后缀的最大长度,那么 i 的最大长度为 f [ i ] + g [ i ] - 1(减去重复元素)
代码:
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define all(v) v.begin(),v.end()
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f;
const int N = 2e5+5;
int n;
int a[N];
int f[N],g[N];
int tr1[N],tr2[N];
map<int,int>mp;int lowbit(int x){return x&(-x);
}void add1(int x,int c){//加到前面for(int i=x;i<=n;i+=lowbit(i)){tr1[i] = max(tr1[i],c);}return;
}int ask1(int x){int res = 0;for(int i=x;i>=1;i-=lowbit(i)){res = max(res,tr1[i]);}return res;
}void add2(int x,int c){//加到后面for(int i=x;i>=1;i-=lowbit(i)){tr2[i] = max(tr2[i],c);}return;
}int ask2(int x){int res = 0;for(int i=x;i<=n;i+=lowbit(i)){res = max(res,tr2[i]);}return res;
}void solve(){cin>>n;mp.clear();for(int i=0;i<=n+1;i++)f[i] = g[i] = 0;for(int i=0;i<=n+1;i++){tr1[i] = tr2[i] = 0;}for(int i=1;i<=n;i++)cin>>a[i];vector<int>b;//离散化for(int i=1;i<=n;i++){if(mp[a[i]])continue;mp[a[i]] = 1;b.push_back(a[i]);}sort(all(b));for(int i=1;i<=n;i++){int t = lower_bound(all(b),a[i]) - b.begin();a[i] = t+1;}int len = 0;//求前缀for(int i=1;i<=n;i++){f[i] = ask1(a[i]-1) + 1;add1(a[i],f[i]);len = max(len,f[i]);}/*for(int i=1;i<=n;i++){for(int j=i-1;j>=1;j--){if(a[i]>a[j]){f[i] = max(f[i],f[j]+1);len = max(len,f[i]);}}}*/for(int i=n;i>=1;i--){//求后缀g[i] = ask2(a[i]+1) + 1;add2(a[i],g[i]);}vector<int>ans;for(int i=1;i<=n;i++){if(f[i]+g[i]-1 == len){//如果前面的长度加上后面的长度为最长,那么就选ans.push_back(i);}}cout<<ans.size()<<"\n";for(int i=0;i<ans.size();i++){cout<<ans[i]<<" ";}cout<<"\n";}signed main(){int T=1;cin>>T;while(T--){solve();}return 0;
}
相关文章:
G - Merchant Takahashi / F - Useless for LIS
G - Merchant Takahashi 首先考虑暴力 DP。 设最后一步走到编号 ii 的城镇的方案的最大收益为 fifi,则每次集市相当于是 fTi←fj−C∣Ti−j∣Pi(1≤j≤n)。 这样每次可以通过枚举 j 来转移,这样总时间复杂度是 O(nm) 的&…...
自然语言处理实例
引子:基于聊天机器人项目的自然语言处理(NLP)学习路线 自然语言处理(Natural Language Processing,简称 NLP)是人工智能的重要分支,旨在帮助计算机理解、生成和处理人类语言。NLP 技术广泛应用于搜索引擎、机器翻译、语音识别、文本摘要、情感分析、对话系统等领域。为…...
『功能项目』主角属性值显示【75】
本章项目成果展示 我们打开上一篇74穿戴装备的项目, 本章要做的事情是制作主角属性界面,实现在面板上显示主角的攻击力等数值 制作一个简易的主角界面(创建Image与Text显示即可) 创建一个空物体 重命名为PlayerInfo 在其子级下创…...
单片机嵌入式编程中常用技术点
Open CV,QT,Linux,多线程,网络编程,文件编程在单片机嵌入式编程中,这些技术在单片机嵌入式编程中的作用: 一、OpenCV 在单片机嵌入式编程中,虽然单片机的计算能力相对有限…...
【毕业论文+源码】基于ASP+NET的人事管理系统
引言 人事管理系统是针对企业内部人事管理设计,分角色实现对公司部门及各部门员工的增、删、改、查以及对员工考勤的管理。 编写目的: 在系统需求分析的基础上,对需求分析中产生的功能模块进行过程描述,设计功能模块的内部细节&…...
计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
文章目录 概览LLaMA和LLaMA2的区别AbstractIntroductionPretrainingFine-tuning1. 概括2、Supervised Fine-Tuning(SFT)3、⭐Reinforcement Learning with Human Feedback(RLHF)🔺总览Training Objectives:…...
如何使用VM中win10搭建Hfish蜜罐(危险感知平台)。从下载到部署详细教程
得而不惜就该死。 -----古月方源 引言:最近跟一个老师做东西,叫我搞清楚蜜罐的搭建和一些底层逻辑,所以记录一下。 一、实验准备 (一)win10虚拟机 (若有需要可以后台私信) (二&…...
Rust: AES 加密算法库
在Rust中,进行AES加密通常会用到一些现有的库,因为Rust标准库中并不直接提供AES加密的API。一个非常流行的库是crypto-box或者更广泛使用的ring库,但ring库由于依赖问题有时可能难以编译,另一个常用的库是cryptography的Rust绑定&…...
计算机网络34——Windows内存管理
1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …...
Redisson 总结
1. 基础使用 1.1 引入依赖 <dependencies><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId></dependency> </dependencies>包含的依赖如下 1.2 配置文件 其实默认主机就…...
EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)
摘要 EfficientFormerV2是一种通过重新思考ViT设计选择和引入细粒度联合搜索策略而开发出的新型移动视觉骨干网络。它结合了卷积和变换器的优势,通过一系列高效的设计改进和搜索方法,实现了在移动设备上既轻又快且保持高性能的目标。这一成果为在资源受…...
文心智能体搭建步骤
通过使用文心智能体平台来创建智能体的过程。这种方法可以让没有编程经验的人也能快速构建智能体,降低了技 术门槛。以下是一些建议和心得: 1.选择合适的平台:文心智能体平台是一个优秀的选择,它提供了零代码和低代码的开发环境,极大地降低了…...
PHP安全
PHP伪协议: 一.【file://协议】 PHP.ini: file:// 协议在双off的情况下也可以正常使用; allow_url_fopen :off/on allow_url_include:off/on file:// 用于访问本地文件系统,在CTF中通常用来读取本地文…...
c++278函数指针
#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<string.h> #include<stdio.h>//数组类型基本语法知识梳理 //定义一个数组类型 //int a[10];//定义一个指针数组类型//定义一个指向数组类型的指针 数组类型的指针void main() {int a[10];//a代…...
sklearn特征选取之SelectFromModel
sklearn.feature_selection.SelectFromModel 是一种基于模型的重要性权重进行特征选择的工具,允许我们根据学习器的权重或特征重要性自动选择特征。它通过从模型中提取特征的重要性来选择特征,常用于与那些具有 coef_ 或 feature_importances_ 属性的模型…...
vue一级、二级路由设计
一、一级路由设计 一级路由是指直接映射到应用程序中顶级页面或组件的路由。这些路由通常定义在Vue Router的配置中,作为应用程序导航结构的基础。 直接映射:一级路由直接映射到URL路径和Vue组件,没有嵌套关系。顶级导航:它们通…...
python爬虫:将知乎专栏文章转为pdf
欢迎关注本人的知乎主页~ 实现思路 用户输入专栏ID: 代码首先提示用户输入一个知乎专栏的ID,默认值为 c_1747690982282477569。输入的ID用于构建API请求的URL。 发送HTTP请求: 使用 requests.get() 向知乎API发送GET请求,获取指定…...
嵌入式笔记(入门系列2)
目录 宏函数 预处理器#include 内存泄漏 内存对齐 堆与栈 Malloc 和 New Inline 宏函数 宏函数,宏函数,实际上就是让宏像函数一样被使用。宏函数以函数形式的方式进行入参,但是返回结果是通过表达式求值得到。话说的抽象,我…...
并发编程多线程
1.线程和进程的区别? 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间线程更轻量,线程上下文切换成本一般上要比进程上下文…...
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台 1. 企业AI应用的新选择 最近接触了不少企业客户,发现一个普遍现象:大家都想用AI,但真正能用起来的却不多。技术门槛高、开发周期长、维护成本大,这些问题让很…...
Klipper固件深度剖析:从分布式架构到高级运动控制实战指南
Klipper固件深度剖析:从分布式架构到高级运动控制实战指南 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper Klipper是一款革命性的3D打印机固件,采用独特的分布式架构设计…...
如何高效使用MRiLab数值磁共振成像仿真平台:面向开发者的创新应用指南
如何高效使用MRiLab数值磁共振成像仿真平台:面向开发者的创新应用指南 【免费下载链接】MRiLab A Numerical Magnetic Resonance Imaging (MRI) Simulation Platform 项目地址: https://gitcode.com/gh_mirrors/mr/MRiLab MRiLab是一款专业的数值磁共振成像仿…...
Qt图形界面开发:Phi-3-mini生成UI代码片段与信号槽连接示例
Qt图形界面开发:Phi-3-mini生成UI代码片段与信号槽连接示例 1. 引言:当AI遇上Qt界面开发 作为一名Qt开发者,你是否经常陷入这样的困境:每次新建一个对话框或窗口,都要重复编写相似的UI初始化代码?特别是当…...
Hunyuan-MT-7B多场景实践:像素语言传送门在独立游戏开发、字幕生成、文档本地化中的三重应用
Hunyuan-MT-7B多场景实践:像素语言传送门在独立游戏开发、字幕生成、文档本地化中的三重应用 1. 像素语言传送门:当翻译遇见16-bit冒险 在独立游戏开发者的工作台上,一款名为"像素语言传送门"的工具正在改变传统翻译体验。这款基…...
WebPlotDigitizer:计算机视觉辅助的图表数据提取工具深度解析
WebPlotDigitizer:计算机视觉辅助的图表数据提取工具深度解析 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和数据…...
小白也能玩转大模型!Llama Factory免代码训练平台入门
小白也能玩转大模型!Llama Factory免代码训练平台入门 1. 什么是Llama Factory? 想象一下,你有一个智能助手,但它总是回答一些不太符合你需求的内容。这时候,你就需要"教"它变得更懂你——这就是大模型微调…...
个人电脑也能玩转大模型!Llama Factory+QLoRA微调实战,RTX4060即可运行
个人电脑也能玩转大模型!Llama FactoryQLoRA微调实战,RTX4060即可运行 你是不是也以为,训练一个属于自己的大语言模型,是那些拥有昂贵服务器和顶级显卡的大公司才能做的事?动辄几十GB的显存需求,让很多个人…...
Phi-4-mini-reasoning实操手册:从模型加载到端口访问完整流程
Phi-4-mini-reasoning实操手册:从模型加载到端口访问完整流程 1. 模型概述 Phi-4-mini-reasoning是一款3.8B参数的轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。该模型由Azure AI Foundry开发,主打"小参数、强推…...
颠覆性视频转文字体验:零基础掌握bili2text全流程攻略
颠覆性视频转文字体验:零基础掌握bili2text全流程攻略 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为从B站视频中提取文字内容而烦恼&…...
