CF 1642 F. Two Arrays 随机 + sosdp

文章目录

  • 题意
  • 思路

传送门

题意

给你nnn个长度为mmm的数组,每个数组都有一个价值wiw_iwi,让你选出两个数组他们没有交集且价值和最大,如果没有输出−1-11

2≤n≤1e5,1≤m≤5,1≤ai,j,wi≤1e92\le n\le 1e5,1\le m\le 5,1\le a_{i,j},w_i\le 1e92n1e5,1m5,1ai,j,wi1e9

思路

看到mmm很小,很容易向状压地方靠,假设aaa很小,那么这个题就很简单了,我们将每个数组状压成一个二进制,让后sosdpsosdpsosdp求一下子集最小值,让后遍历即可获得答案。

但是这个题aaa高达1e91e91e9,但是我们发现其最终答案是一对之间,那么我们将aaa随机映射到0−150-15015之间的某个数,注意同一个数一定映射到相同数,不同数可能映射到相同数,我们发现这样操作后对于答案的两个数组他们都映射到不同数上的概率为0.01880.01880.0188,这也是答案正确的概率,虽然这个数很小,但是我们运行200200200次,期望概率就达到222以上了,基本可以认为是正确的。

复杂度P(250∗16∗(1<<16))P(250*16*(1<<16))P(25016(1<<16))

trick:trick:trick遇到很大的数可以将其映射到小范围的数上进行乱搞。

#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=500010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;int n,m;
int a[N][6],w[N];
int b[N][6];
int f[1<<21];
mt19937 rnd(time(0));
int mp[N],id[N];
vector<int>v;template <class T>
bool read(T &ret)//输入
{char c;int sgn;T bit=0.1;if(c=getchar(), c==EOF)return 0;while(c!='-' && c!='.' && (c<'0' || c>'9'))c=getchar();sgn=(c=='-')? -1:1;ret=(c=='-')? 0:(c-'0');while(c=getchar(), c>='0' && c<='9')ret=ret*10+(c-'0');if(c==' ' || c=='\n'){ret*=sgn;return 1;}while(c=getchar(), c>='0' && c<='9')ret+=(c-'0')*bit, bit/=10;ret*=sgn;return 1;
}int find(int x) {return lower_bound(v.begin(),v.end(),x)-v.begin();
}void solve() {read(n); read(m);for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {read(a[i][j]);v.pb(a[i][j]);}read(w[i]);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {a[i][j]=find(a[i][j]);}}srand(20000926);int ans=2e9+7;for(int _=1;_<=250;_++) {for(int i=0;i<N;i++) id[i]=rand()%16;memset(f,0x3f,sizeof(f));for(int i=1;i<=n;i++) {int state=0;for(int j=1;j<=m;j++) {b[i][j]=id[a[i][j]];state|=1<<b[i][j];}f[state]=min(f[state],w[i]);}int all=1<<16;for(int j=0;j<16;j++) {for(int i=0;i<all;i++) {if(!(i>>j&1)) f[i|(1<<j)]=min(f[i|(1<<j)],f[i]);}}for(int i=0;i<all;i++) {int j=(all-1)^i;if(f[i]!=0x3f3f3f3f&&f[j]!=0x3f3f3f3f) ans=min(ans,f[i]+f[j]);}}printf("%d\n",ans==2e9+7? -1:ans);
}int main() {LL f1,f2;f1=f2=1;for(int i=15;i>=15-10+1;i--) f1*=i;for(int i=1;i<=10;i++) f2*=15;printf("%.10f\n",1.0*f1/f2);int _=1;while(_--) {solve();}return 0;
}

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

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

相关文章

你必须知道的Dockerfile

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。本文预计阅读时间为5分钟。01—关于Dockerfile在Docker中创建镜像最常用的方式&#xff0c;就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件&#xff0c;我…

2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)

2019牛客暑期多校训练营&#xff08;第五场&#xff09;C generator 2 思路 x0x0x_0 x_0x0​x0​ x1a∗x0∗bx_1 a * x_0 * bx1​a∗x0​∗b x2a∗x1ba2∗x0a∗bbx_2 a * x_1 b a ^{2} * x_0 a * b bx2​a∗x1​ba2∗x0​a∗bb 容易发现后项是一个等比数列求和 xnanx0…

RabbitMQ 死信/死信队列

一、RabbitMQ 死信/死信队列1、DLXDead Letter Exchange 的缩写DLX&#xff08;Dead Letter Exchanges&#xff09;死信交换&#xff0c;死信队列本身也是一个普通的消息队列&#xff0c;在创建队列的时候&#xff0c;通过设置一些关键参数&#xff0c;可以将一个普通的消息队列…

AtCoder Regular Contest 059

文章目录C - Be TogetherD - UnbalancedE - Children and CandiesF - Unhappy Hacking题目链接 C - Be Together 200200200分 结论 直接取所有数的平均数&#xff0c;由于需要是整数&#xff0c;所以算一下mid,mid1,mid−1mid,mid1,mid-1mid,mid1,mid−1&#xff0c;取最小值…

P2303 [SDOI2012] Longge 的问题

P2303 [SDOI2012] Longge 的问题 思路 我们显然可以枚举每一对数的gcdgcdgcd进行求解&#xff0c;进而我们有如下推导&#xff1a; >∑i1ngcd(i,n)>\sum _{i 1} ^ {n} gcd(i, n)>i1∑n​gcd(i,n) >∑d∣nd∑i1n(gcd(i,d)d)>\sum _{d \mid{n}} d \sum _{i 1}…

centos7 rabbitmq安装/配置

一、RabbitMQ简单介绍RabbitMQ就是当前最主流的消息中间件之一。RabbitMQ是一个开源的AMQP实现&#xff0c;服务器端用Erlang语言编写&#xff0c;支持多种客户端&#xff0c;如&#xff1a;Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等&#xff0c;支…

Xor Path

Xor Path 思路 先是看错题目&#xff0c;以为是所有的路径异或值的和&#xff0c;然后好像用了个假的print函数&#xff0c;一直wa&#xff0c;&#xff0c;&#xff0c; 既然是异或&#xff0c;那么当一个点出现的次数是偶数次的时候它会被自己异或成零&#xff0c;也就是队…

CF 1642 E. Anonymity Is Important 线段树 + 离线

文章目录题意思路传送门 题意 有nnn个人&#xff0c;给你qqq个请求&#xff0c;分以下三种&#xff1a; [l,r,x][l,r,x][l,r,x] 如果x0x0x0&#xff0c;代表[l,r][l,r][l,r]这个区间内的人都没病。[l,r,x][l,r,x][l,r,x] 如果x1x1x1&#xff0c;代表[l,r][l,r][l,r]这个区间内…

Hyper-V + CentOS7 安装视频教程

一、前言本文使用图文视频的方式展示安装Centos7&#xff0c;【喜欢看视频学习的童靴请拖至文尾观看视频】二、虚拟机配置指定虚拟机名称&安装位置选择虚拟机代数 第一代虚拟机&#xff08;例如Server 2008等平台技术&#xff0c;支持Vista、Win7&#xff09; 第二代虚拟机…

SP5971 LCMSUM - LCM Sum

SP5971 LCMSUM - LCM Sum 思路 ∑i1nlcm(i,n)\sum_{i 1}^{n}lcm(i, n)i1∑n​lcm(i,n) >∑i1ningcd(i,n)> \sum_{i 1}^{n}\frac{i n}{gcd(i, n)}>i1∑n​gcd(i,n)in​ >n∑i1nigcd(i,n)> n\sum_{i 1}^{n}\frac{i}{gcd(i, n)}>ni1∑n​gcd(i,n)i​ 我们按…

程序员修神之路--用NOSql给高并发系统加速

领取福利记得长按&#xff0c;领取技术书籍哦随着互联网大潮的到来&#xff0c;越来越多网站&#xff0c;应用系统需要海量数据的支撑&#xff0c;高并发、低延迟、高可用、高扩展等要求在传统的关系型数据库中已经得不到满足&#xff0c;或者说关系型数据库应对这些需求已经显…

欧拉函数的性质及其证明

欧拉函数 ppp是素数&#xff0c;则有ϕ(p)p−1\phi(p) p - 1ϕ(p)p−1 证明&#xff1a;显然。 ppp是素数&#xff0c;npkn p ^ knpk&#xff0c;则ϕ(n)pk−pk−1\phi(n) p ^ k - p ^ {k - 1}ϕ(n)pk−pk−1 证明&#xff1a; [1,n][1, n][1,n]内&#xff0c;ppp的约数有p…

AtCoder Regular Contest 061

文章目录C - Many FormulasD - Snukes ColoringE - Snukes Subway TripF - Card Game for Three传送门 C - Many Formulas Score : 300300300 points 爆搜 直接dfsdfsdfs爆搜即可 复杂度O(2n)O(2^n)O(2n) 代码 D - Snuke’s Coloring Score : 400400400 points 考虑有标…

限时团购,6.5折:《C# 7.0 核心技术指南》

大家好&#xff0c;经过近两年的翻译&#xff0c;《C# 7.0 核心技术指南》终于和大家见面了。全书由 ThoughtWorks 高级咨询师&#xff0c;资深 .NET 专家刘夏翻译。作为一本第七次再版的图书&#xff0c;此次翻译对书中的字句进行了重新整理。期间和图书的原作者 Joe Albahari…

小A的最短路

小A的最短路 思路 树上问题求两个点的最短距离&#xff0c;显然能用lcalcalca来进行lognlog_nlogn​的查询&#xff0c;引入了两个无边权的点&#xff0c;所以我们的路劲就可以规划成三种x−>y&#xff0c;x−>u−>v−>y&#xff0c;x−>v−>u>−yx -&g…

Codeforces Beta Round #11 B. Jumping Jack 思维

文章目录题意&#xff1a;思路&#xff1a;传送门 题意&#xff1a; 初始在000点&#xff0c;第iii次跳跃可以跳iii的距离&#xff0c;可以选择向右或者向左跳&#xff0c;求最少多少次可以跳到xxx点。 −1e9≤x≤1e9-1e9\le x\le 1e9−1e9≤x≤1e9 思路&#xff1a; 我们贪…

Azure 命令行工具大混战,都是什么,该选哪个?

点击上方蓝字关注“汪宇杰博客”导语最近在学习 Azure 的命令行玩法&#xff0c;发现官方有不止一种命令行工具&#xff0c;容易对新手产生混淆&#xff0c;本文将介绍各种工具都是干啥的&#xff0c;以及如何选择。目前&#xff0c;微软官方有3个Azure命令行工具&#xff0c;分…

HDU 2588 GCD(欧拉函数)

GCD 思路 题目要求&#xff0c;对于给定的n,mn, mn,m要求有多少数∑i1ngcd(i,n)>m\sum _{i 1} ^{n} gcd(i, n) > m∑i1n​gcd(i,n)>m 我们可以对这个式子进行化简&#xff0c;通过枚举dgcd(i,n)d gcd(i, n)dgcd(i,n)有 ∑d∣n∑i1ngcd(i,d)d\sum _{d \mid n} \su…

2021 ccpc 哈尔滨 G. Damaged Bicycle 状压 + 期望dp

文章目录题意&#xff1a;思路&#xff1a;传送门 题意&#xff1a; 你需要从111走到nnn&#xff0c;初始速度是ttt&#xff0c;某些地方有自行车&#xff0c;每个位置自行车有pip_ipi​的概率是坏掉的&#xff0c;如果自行车没坏可以骑上自行车&#xff0c;速度是rrr&#x…

HDU 4983 Goffi and GCD(欧拉函数)

Goffi and GCD 思路 题目要求∑i1n∑j1ngcd(n−i,n)gcd(n−j,n)nk\sum_{i 1} ^{n} \sum _{j 1} ^{n} gcd(n - i, n)gcd(n - j, n) n ^ {k}∑i1n​∑j1n​gcd(n−i,n)gcd(n−j,n)nk 显然有gcd(n−i,n)<ngcd(n - i, n) < ngcd(n−i,n)<n对于k>3k > 3k>3直…