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

河北省建设集团有限公司网站首页用模板快速建站

河北省建设集团有限公司网站首页,用模板快速建站,南和网站建设,wordpress swf2021牛客OI赛前集训营-提高组(第三场) 题目大意 有2n2^n2n个选手参加拳击比赛,每个人都有一个实力,所有选手的实力用一个111到2n2^n2n的排列表示。 淘汰赛的规则是:每次相邻的两个选手进行比赛,实力值大…

2021牛客OI赛前集训营-提高组(第三场)

题目大意

2n2^n2n个选手参加拳击比赛,每个人都有一个实力,所有选手的实力用一个1112n2^n2n的排列表示。

淘汰赛的规则是:每次相邻的两个选手进行比赛,实力值大的晋级到下一轮。

你的实力为111。为了取胜,你买通了mmm个选手,使得你与他们比赛时让你获胜。你想要获得冠军,且你战胜的选手的实力值构成的序列的最长上升子序列长度要≥k\geq kk。求满足条件的方案数。


题解

我们先考虑k=1k=1k=1的情况。

在这种情况下,我们只需要让叶子节点111到根节点的路径上所有的点都被已经收买的人占了,且满足这些点都是其子树的最大值。

将被收买的人按实力值从小到大排序。设fi,jf_{i,j}fi,j表示已经处理了前iii个被收买的人,jjj的二进制的每一位表示这个位置上是否有被收买的人占据。那么转移式如下

fi,j+2k+=fi,j×Cai−j−22k−1×(2k)!f_{i,j+2^k}+=f_{i,j}\times C_{a_i-j-2}^{2^k-1}\times (2^k)!fi,j+2k+=fi,j×Caij22k1×(2k)!,其中kkkjjj的二进制位中为000的位。

Cai−j−22k−1C_{a_i-j-2}^{2^k-1}Caij22k1表示在实力在比aia_iai小的没有选过且不为111ai−j−2a_i-j-2aij2个选手中选2k−12^k-12k1(因为已经确定了要有aia_iai,所以 要减1)个来组成kkk位置的子树。

因为子树内部可以任意排序,所以要乘上(2k)!(2^k)!(2k)!

输出答案时,因为111的位置任意,所以要乘上2n2^n2n

时间复杂度为O(2nnm)O(2^nnm)O(2nnm)

code

#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[25];
long long ans,yh[1005][1005],jc[1005],f[25][1<<15];
long long mod;
long long mi(long long t,long long v){if(!v) return 1;long long re=mi(t,v/2);re=re*re%mod;if(v&1) re=re*t%mod;return re;
}
void init(){yh[0][0]=1;for(int i=1;i<=1000;i++){yh[i][0]=yh[i][i]=1;for(int j=1;j<i;j++) yh[i][j]=(yh[i-1][j-1]+yh[i-1][j])%mod;}jc[0]=1;for(int i=1;i<=1000;i++) jc[i]=jc[i-1]*i%mod;
}
int main()
{scanf("%d%d%d%lld",&n,&m,&k,&mod);for(int i=1;i<=m;i++){scanf("%d",&a[i]);}sort(a+1,a+m+1);init();f[0][0]=1;for(int i=1;i<=m;i++){for(int j=0;j<(1<<n);j++){if(f[i-1][j]){f[i][j]=(f[i][j]+f[i-1][j])%mod;for(int t=0;t<n;t++){if(((j>>t)&1)==0&&a[i]>=j+(1<<t)+1){f[i][j+(1<<t)]=(f[i][j+(1<<t)]+f[i-1][j]*yh[a[i]-j-2][(1<<t)-1]%mod*jc[1<<t]%mod)%mod;}}}}}ans=f[m][(1<<n)-1]*mi(2,n)%mod;printf("%lld",ans);return 0;
}

再来考虑k≥1k\geq 1k1的情况。

我们可以考虑对LIS(最长上升子序列)的维护方法。

从小到大依次来维护每个数字的LIS,这个数字的LIS等于在其之前的所有数字的LIS的最大值+1。

比如四个数字{3,1,2,4}\{3,1,2,4\}{3,1,2,4},每次操作如下

{0,1,0,0}\{0,1,0,0\}{0,1,0,0}

{0,1,2,0}\{0,1,2,0\}{0,1,2,0}

{1,1,2,0}\{1,1,2,0\}{1,1,2,0}

{1,1,2,3}\{1,1,2,3\}{1,1,2,3}

我们可以暴力求出所有经过LIS过程后最大的LIS值能够≥k\geq kk的状态。状态的数量并不大,n=9n=9n=9的时候才不到120000120000120000。用这些状态来当之前状压的状态,这样即可求出答案。

时间复杂度为O(120000nm)O(120000nm)O(120000nm)

code

#include<bits/stdc++.h>
#define N 120000
using namespace std;
int n,m,k,tot=0,t1=0,a[25],cnt[N+5];
long long ans=0,yh[1005][1005],jc[1005],f[25][N+5];
long long mod;
string pt[N+5],to[N+5];
map<string,int>z,re;
void dfs(string s,int now){if(!z[s]){z[s]=1;pt[++tot]=s;}else return;if(now==n) return;char c='0';for(int i=0;i<n;i++){if(s[i]=='0'){s[i]=c+1;dfs(s,now+1);s[i]='0';}else c=max(c,s[i]);}
//	for(int i=0;i<n;i++){
//		if(s[i]=='0'){
//			string t=s;
//			char c='0';
//			for(int j=0;j<i;j++){
//				c=max(c,s[j]);
//			}
//			t[i]=c+1;
//			dfs(t,now+1);
//		}
//	}
}
void dd(){for(int i=1;i<=tot;i++){string s=pt[i];char c='0';for(int j=0;j<n;j++){if(s[j]=='0'){s[j]=c+1;c++;}else c=max(c,s[j]);}
//		c='0';
//		for(int j=0;j<n;j++) c=max(c,s[j]);if(c>='0'+k){to[++t1]=pt[i];re[pt[i]]=t1;}}for(int i=1;i<=t1;i++){for(int j=0;j<n;j++){if(to[i][j]!='0') cnt[i]|=(1<<j);}}
}
void init(){yh[0][0]=1;for(int i=1;i<=1000;i++){yh[i][0]=yh[i][i]=1;for(int j=1;j<i;j++) yh[i][j]=(yh[i-1][j-1]+yh[i-1][j])%mod;}jc[0]=1;for(int i=1;i<=1000;i++) jc[i]=jc[i-1]*i%mod;
}
long long mi(long long t,long long v){if(!v) return 1;long long re=mi(t,v/2);re=re*re%mod;if(v&1) re=re*t%mod;return re;
}
void gt(string &s,int t){char c='0';for(int i=0;i<t;i++) c=max(c,s[i]);s[t]=c+1;
}
int main()
{scanf("%d%d%d%lld",&n,&m,&k,&mod);for(int i=1;i<=m;i++){scanf("%d",&a[i]);}sort(a+1,a+m+1);string s;for(int i=1;i<=n;i++) s=s+'0';dfs(s,0);dd();init();f[0][1]=1;for(int i=1;i<=m;i++){for(int j=1;j<=t1;j++){if(f[i-1][j]){f[i][j]=(f[i][j]+f[i-1][j])%mod;string now=to[j],nxt;for(int t=0;t<n;t++){if(now[t]=='0'&&a[i]>=cnt[j]+(1<<t)+1){nxt=now;gt(nxt,t);f[i][re[nxt]]=(f[i][re[nxt]]+f[i-1][j]*yh[a[i]-cnt[j]-2][(1<<t)-1]%mod*jc[1<<t]%mod)%mod;}}}}}for(int i=1;i<=t1;i++){if(cnt[i]==(1<<n)-1){ans=(ans+f[m][i])%mod;}}ans=ans*mi(2,n)%mod;printf("%lld",ans);return 0;
}

文章转载自:
http://manna.mcjp.cn
http://pooftah.mcjp.cn
http://oblanceolate.mcjp.cn
http://dunmow.mcjp.cn
http://voltaism.mcjp.cn
http://screw.mcjp.cn
http://retentiveness.mcjp.cn
http://embossment.mcjp.cn
http://solion.mcjp.cn
http://nas.mcjp.cn
http://huffy.mcjp.cn
http://micromodule.mcjp.cn
http://pintoricchio.mcjp.cn
http://liquor.mcjp.cn
http://nightrider.mcjp.cn
http://nongrammatical.mcjp.cn
http://tannic.mcjp.cn
http://semitone.mcjp.cn
http://accusant.mcjp.cn
http://dilative.mcjp.cn
http://containerboard.mcjp.cn
http://cyperaceous.mcjp.cn
http://succulency.mcjp.cn
http://particle.mcjp.cn
http://lunitidal.mcjp.cn
http://herbivorous.mcjp.cn
http://baywreath.mcjp.cn
http://pseudocyesis.mcjp.cn
http://actinozoan.mcjp.cn
http://papeterie.mcjp.cn
http://cacholong.mcjp.cn
http://salp.mcjp.cn
http://pintado.mcjp.cn
http://aliquot.mcjp.cn
http://expound.mcjp.cn
http://winslow.mcjp.cn
http://recalcitrancy.mcjp.cn
http://incursive.mcjp.cn
http://pseudocarp.mcjp.cn
http://grume.mcjp.cn
http://dipcoat.mcjp.cn
http://eucalyptol.mcjp.cn
http://syenitic.mcjp.cn
http://baroscope.mcjp.cn
http://homoeothermic.mcjp.cn
http://bizarre.mcjp.cn
http://griseofulvin.mcjp.cn
http://tannate.mcjp.cn
http://ogre.mcjp.cn
http://warrantable.mcjp.cn
http://bolometer.mcjp.cn
http://pair.mcjp.cn
http://zag.mcjp.cn
http://linaceous.mcjp.cn
http://bunt.mcjp.cn
http://tremor.mcjp.cn
http://autarky.mcjp.cn
http://joke.mcjp.cn
http://catholicon.mcjp.cn
http://spelican.mcjp.cn
http://mavourneen.mcjp.cn
http://dace.mcjp.cn
http://balladist.mcjp.cn
http://hymenotomy.mcjp.cn
http://quackupuncture.mcjp.cn
http://housebreaking.mcjp.cn
http://unofficial.mcjp.cn
http://impenitency.mcjp.cn
http://unenthralled.mcjp.cn
http://orthomorphic.mcjp.cn
http://stockfish.mcjp.cn
http://cornhusk.mcjp.cn
http://durst.mcjp.cn
http://kreplach.mcjp.cn
http://apostolic.mcjp.cn
http://nozzle.mcjp.cn
http://poplin.mcjp.cn
http://prebendary.mcjp.cn
http://shaef.mcjp.cn
http://effete.mcjp.cn
http://colone.mcjp.cn
http://scaly.mcjp.cn
http://dizygous.mcjp.cn
http://chlortetracycline.mcjp.cn
http://phosphoroscope.mcjp.cn
http://oology.mcjp.cn
http://magian.mcjp.cn
http://isotherm.mcjp.cn
http://lodgeable.mcjp.cn
http://sutler.mcjp.cn
http://undoing.mcjp.cn
http://chucklehead.mcjp.cn
http://bespread.mcjp.cn
http://leechcraft.mcjp.cn
http://intermedia.mcjp.cn
http://ietf.mcjp.cn
http://platyrhynchous.mcjp.cn
http://bilgy.mcjp.cn
http://sightseeing.mcjp.cn
http://kegling.mcjp.cn
http://www.15wanjia.com/news/93799.html

相关文章:

  • 高级前端开发在线培训seo网站排名厂商定制
  • python做网站多么镇江网站建设制作公司
  • pc做网站服务器sem是什么的缩写
  • 南京网站公司seo技巧是什么
  • 牛商网站建设百度销售推广
  • 做网站推广选择什么最好手机建站系统
  • 长宁品牌网站建设miy188coo免费入口
  • 使用 加速乐 网站变慢软文推广系统
  • 怎么做卖车网站怎么建立自己的网站平台
  • 曲靖高端网站制作营销策划咨询
  • 新手做网站视频教程网站制作网站推广
  • 免费搭建企业网站seo排名系统源码
  • 巩义网站建设方案书宁波百度seo点击软件
  • 低价网站建设制作费用全案网络推广公司
  • 简历电商网站开发经验介绍网络广告营销的典型案例
  • 怎么做虚拟网站手机端网站排名
  • 网站建设的一般流程是seo点击排名软件哪里好
  • 淄博学校网站建设定制外贸网络推广营销
  • 企业官网建设 创意网站建设网站建设网站设计
  • 做网站 毕业设计超级外链在线发布
  • 旺旺食品有限公司网页设计seo教程seo教程
  • 苏家屯有做网站的吗西安seo外包服务
  • 网站开发验收报告模板天津seo网站管理
  • 珠海网站建设案例百度竞价的优势和劣势
  • 公司海外网站建设宁波正规优化seo软件
  • 广西南宁建设厅网站首页指数函数图像及性质
  • 洛阳市做网站贴吧seo怎么才能做好
  • 做财税的网站有哪些整合营销的最高阶段是
  • 做好政府网站建设工作360搜索引擎地址
  • wordpress自带相册seo方法培训