CF802C Heidi and Library (hard)

news/2024/11/17 15:11:40/文章来源:https://www.cnblogs.com/liyixin0514/p/18550577

CF802C Heidi and Library (hard)

模拟退火。

最初的方案是每买一本书就马上扔掉,花费 \(\sum c_{a_i}\)。然后问题转化成保留一些书,最大化价值。

考虑 \(i\) 不需要买的情况,当且仅当前一个和它颜色相同的书没有被扔掉,设前一个颜色相同的是 \(la_{a_i}\),那么在时间 \([la_{a_i},i)\) 中,第 \(la_{a_i}\) 本书会一直在书架上面。

因此问题就是有 \(O(n)\) 个区间,最大化选择的区间价值,使得每个时间被覆盖的次数不超过 \(m-1\)(不是 \(m\),因为每个时间你需要一个空的位置来买书以及马上扔掉)。

这个非常的网络流,但是我不会建模。。。

于是可以模拟退火。给所有区间钦定一个选择顺序,然后按顺序贪心地选择,如果能选就直接选上。(一次贪心可以使用线段树优化,\(O(n \log n)\))显然这个贪心是错误的,所以每次退火随机交换两个顺序,卡个时间一直做退火。

可以过。

// sa yyds!
#include<bits/stdc++.h>
#define sf scanf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
namespace plastic {constexpr int N=85;int n,a[N],c[N],m;ll ans;struct edge {int l,r,w;};vector<edge> vec;int la[N];bool del[N];int s;constexpr double time_limit=0.95,T=10,delta=0.99,eps=1e-15;mt19937 rd(random_device{}());ll mx;struct seg {int tr[N<<2],tag[N<<2];void clear() { memset(tr,0,sizeof(tr)), memset(tag,0,sizeof(tag)); }void maketag(int u,int t) {tr[u]+=t,tag[u]+=t;}void pushup(int u) { tr[u]=max(tr[u<<1],tr[u<<1|1]); }void pushdown(int u) { if(tag[u]) maketag(u<<1,tag[u]),maketag(u<<1|1,tag[u]), tag[u]=0;}void insert(int u,int l,int r,int L,int R) {if(l>=L&&r<=R) return maketag(u,1), void(0);int mid=(l+r)>>1;pushdown(u);if(L<=mid) insert(u<<1,l,mid,L,R);if(mid+1<=R) insert(u<<1|1,mid+1,r,L,R);pushup(u);}int query(int u,int l,int r,int L,int R) {if(l>=L&&r<=R) return tr[u];int mid=(l+r)>>1;pushdown(u);int s=0;if(L<=mid) s=query(u<<1,l,mid,L,R);if(mid+1<=R) s=max(s,query(u<<1|1,mid+1,r,L,R));pushup(u);return s;}}Tr;ll calc() {ll sum=0;Tr.clear();for(auto u : vec) {if(u.l+1<=u.r-1) {if(Tr.query(1,1,n,u.l+1,u.r-1)<=m-2) sum+=u.w, Tr.insert(1,1,n,u.l+1,u.r-1);} else sum+=u.w;}return sum;}void sa() {double t=T;while(t>eps) {int x=rd()%s,y=rd()%s;swap(vec[x],vec[y]);ll now=calc();if(now > mx) mx=now;else if(1.0*(mx-now)*T>rand()/RAND_MAX) swap(vec[x],vec[y]);t*=delta;}}void main() {clock_t st=clock();srand(time(0));sf("%d%d",&n,&m);rep(i,1,n) sf("%d",&a[i]);rep(i,1,n) sf("%d",&c[i]);rep(i,1,n) {ans+=c[a[i]];if(la[a[i]]) vec.push_back({la[a[i]],i,c[a[i]]});la[a[i]]=i;}s=vec.size();while(clock()-st<time_limit*CLOCKS_PER_SEC) sa();pf("%lld\n",ans-mx);}
}
int main() {plastic :: main();
}

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

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

相关文章

时间

JDK7 时间 全世界的时间, 有一个统一的计算标准. 格林尼治时间/格林威治时间 (Greenwich Mean Time) 简称 GMT. 计算核心: 地球自转一天是 24 小时, 太阳直射时为正午 12 点. 后来发现计算误差较大, 现在格林威治时间已经不再作为标准时间来使用了. 到了 2012 年 1 月, 取消了用…

贴代码框架PasteForm特性介绍之markdown和richtext

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等 案例源码 案例源…

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接:https://tecdat.cn/?p=38258 原文出处:拓端数据部落公众号 在语音处理领域,对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络(2 - D CNN)和长短期记忆网络(LSTM)构建一个用于语音分类任务的网络,特别是针对语音情感识别这一应…

2024长城靶场训练

仿射密码 首先题目描述 使用仿射函数y=3x+9加密得到的密文为JYYHWVPIDCOZ,请尝试对其解密。flag为flag{大写明文}。 1、使用在线网站直接破解或手工计算破解,获得flag。(参数a=3,b=9,对应仿射函数y=3x+9) 仿射密码加密_仿射密码解密手工计算使用解密函数为D(x) = a^-1(x …

学期2024-2025-1 学号20241421 《计算机基础与程序设计》第8周学习总结

作业信息 |这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP| |这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08| |这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、…

QObject,QMainWindpw,QWidget,QDialog介绍

QObject QObject 的角色和特点 在 Qt 框架中,QObject 是整个对象模型的核心基类,它为 Qt 对象树 和 信号-槽机制 提供了基础支持。很多 Qt 的类(包括 QWidget、QDialog、QMainWindow)都直接或间接继承自 QObject。 QObject 的核心功能对象树管理(Object Tree)QObject 提供…

2024-2025-1 20241329 《计算机基础与程序设计》第八周学习总结

作业信息 作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP 作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 作业目标:功能设计与面向对象设计;面向对象设计过程;面向对象语言三要素;汇编、编译、解释、执行 作业正文:https://www…

Alpha冲刺(4/14)——2024.11.15

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

高三鲜花 #2

水发现放假之后其实连鲜花都是不想写的了。 所以这是钓鱼博。 也不能钓这么直接,还是需要写一点东西的。 应该是马上就距离高考还剩 200 天了。然后这里本来写了很多关于 whk 的文本,全删了,觉得有点无意义,毕竟这应该是一篇钓鱼博。 whk 真难。 突然发现我已经退役四个月了…

语文成绩

语文成绩(https://www.luogu.com.cn/record/189365158) 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗? 输入格式 第一行有两个整数 n,p,代表学生数与增加分数的次数。…

「LUCKY STUN穿透」使用Cloudflare的页面规则固定和隐藏网页端口

关于本教程 索引 │ ├─关于本教程 │ ├─在STUN穿透环境中使用WEB服务 │ ├─动态端口带来的麻烦 │ ├─“隐藏端口”和固定端口 │ └─可用的解决方法 │ ├─使用邮件进行通知端口变化 │ └─使用HTTP重定向 │ ├─网络环境优化和STUN穿透规则设…

平板电视食用教程

先来看一道大家基本都能默写出来的题目: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入一个数 \(x\)。 删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 定义排名为比当前数小的数的个数 \(+1\)。查询 \(x\) 的排名。 查询数据结…