当前位置: 首页 > news >正文

CF2003F Turtle and Three Sequences 题解 / 随机化

题目传送门:CF2003F Turtle and Three Sequences。

首先如果 \(b\) 的值域很小我们就可以考虑状压,考虑对 \(b\) 的值域的每一个数染上一个 \([0,m-1]\) 的值,这样 \(b_i = b_j\) 映射后一定也满足,但是 \(b_i \neq b_j\) 不一定映射后满足,说明这个随机化求出的答案一定合法但不一定最优。

我们考虑随机 \(T\) 次来计算概率,一次成功的概率显然为 \(\frac{5!}{5^5} = 3.84\%\),那么 \(T\) 次成功的概率显然为 \(1-(1-3.84\%)^T\),取 \(T=100\) 几乎就是 \(100\%\)

考虑如何计算答案,设 \(f_{i,j,S}\) 表示前 \(i\) 个位置,最后选择的一个位置的 \(a\) 值为 \(j\) 且选择的 \(b\) 的状态为 \(S\)

\[f_{i,a_i,S} = \max_{k\le a_i,w_{b_i}\in S} \{f_{i-1,k,S \backslash {w_{b_i}}} + c_i\} \]

利用滚动数组和树状数组优化一下即可,复杂度 \(O(Tn2^m\log n)\)

#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
inline int read(){char c=getchar();int f=1,ans=0;while(c<48||c>57) f=(c==45?f=-1:1),c=getchar();while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();return ans*f;
}
const int N=3010,M=1<<5;
mt19937_64 randd(time(0));
int n,m,a[N],b[N],c[N],w[N],f[M];
struct tree{int c[N];#define lowbit(x) x&-xinline void add(int i,int x){for (;i<=n;i+=lowbit(i)) c[i]=max(c[i],x);}inline int sum(int i){int ans=-1e18;for (;i;i-=lowbit(i)) ans=max(ans,c[i]);return ans;}
}t[M];
inline int solve(){for (int i=1;i<=n;i++) w[i]=randd()%m;for (int i=0;i<(1<<m);i++) for (int j=1;j<=n;j++) t[i].c[j]=-1e18;int ans=-1e18;for (int i=1;i<=n;i++){for (int j=0;j<(1<<m);j++) f[j]=-1e18;f[1<<w[b[i]]]=c[i];for (int j=0;j<(1<<m);j++) if ((j>>w[b[i]])&1) f[j]=max(f[j],t[j^(1<<w[b[i]])].sum(a[i])+c[i]);for (int j=0;j<(1<<m);j++) t[j].add(a[i],f[j]);ans=max(ans,f[(1<<m)-1]);}return ans;
}
main(){n=read(),m=read();for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=n;i++) b[i]=read();for (int i=1;i<=n;i++) c[i]=read();int T=100,ans=-1e18;while(T--) ans=max(ans,solve());if (ans<=0) puts("-1"); else cout <<ans;return 0;
}
http://www.jsqmd.com/news/338810/

相关文章:

  • 冷库:连锁超市的“第二利润中心”
  • Thinkphp和Laravel框架的基于bs架构的智慧校园通作业互动系统的设计与实现
  • [N_160]基于springboot,vue校园论坛系统
  • 3_1_七段式SVPWM (零序注入法)算法理论与 MATLAB 实现详解
  • 【dz-710】基于单片机的智能衣柜设计
  • 【dz-711】基于单片机的浴室防雾镜设计
  • Staphylococcus Aureus Protein A (SpA)-Derived Peptide ;NVLGAPKKLNESEQAV
  • Thinkphp和Laravel框架的物流车辆货车配送路线信息管理系统
  • MATLAB中的双方与三方演化博弈及Lotka-Volterra模型的稳定点分析与相位图绘制
  • Somatostatin-25 ;SNPAMAPRERKAGCKNFFWKTFTSC
  • 深度解析 ARP 欺骗攻击:原理、实战与防御全攻略!
  • Thinkphp和Laravel框架的物流运输仓储仓库采购信息系统平台的设计与实现
  • Thinkphp和Laravel框架的农贸市场摊位商户管理信息系统设计与实现
  • Thinkphp和Laravel框架的小区车辆停车场车位预约管理系统 可视化
  • 2.3假期记录
  • Zustand:打造 React 应用的“中央银行”级状态管理
  • Matlab弹道仿真软件,界面实时显示弹道,提供源码,同时提供常规弹外弹道仿真软件使用说明书...
  • 【入门必看】网络安全入门:用 Wireshark 分析 ARP 欺骗攻击及防御策略
  • Thinkphp和Laravel框架的小区饮水机自动售水系统的设计和实现
  • 基于华为开发者空间云开发环境(开发桌面),零构建零部署OpenClaw(Moltbot)
  • Steroidogenesis Activator Polypeptide (rat) ;IVQPIISKLYGSGGPPPTGEEDTDEKKDEL
  • Thinkphp和Laravel框架的图书资料借阅信息管理系统的设计与实现
  • 发讯水表:解锁用水计量智能化的新方式
  • (N_160)基于springboot,vue校园论坛系统
  • Thinkphp和Laravel框架的土壤监测信息采集系统
  • C语言核心概念复习(三)
  • 深入Linux网络编程:accept函数——连接请求的“摆渡人”
  • VUE的国际化,怎么实现
  • C语言核心概念复习(一)
  • 智启蓝膜新“视”代|维视创新破解锂电蓝膜检测难题