首页 > 其他分享 >CF1316E Team Building 题解

CF1316E Team Building 题解

时间:2022-11-11 20:45:25浏览次数:84  
标签:Building le read 题解 CF1316E 贡献 观众 now 排球队

可能更好的阅读体验

题目传送门

题目大意

传送门
你需要组建一支排球队。为了组织一支排球队,你需要为队伍里的 \(p\) 个不同的位置,从 \(n\) 个人中选出 \(p\) 个人,且每个位置上都恰好有一个人。另外还需要从剩下的人中选出恰好 \(k\) 个人作为观众。
对于第 \(i\) 个人,已知他作为观众时能为队伍增加 \(a_i\) 点力量,还有他在队伍的第 \(j\) 个位置上时能为队伍增加 \(s_{i,j}\) 点力量。请问这只排球队力量的最大值是多少?

\(n,k\le 10^5\),\(p\le 7\),\(a_i,s_{i,j}\le 10^9\)

题目解析

CF 2300,好像也不是很难,评紫题过分了昂
显然把上场的队员选定之后,那么剩下的肯定是选择贡献大的当做观众。
那么就把所以人作为观众的贡献降序排序,考虑在这个序列上 DP。
\(p\le 7\),显然考虑状态压缩。
问题在于怎么转移。设 \(f_{i,j}\) 为前面 \(i\) 个中选择情况状态压缩之后为 \(j\) 的贡献最大值,不妨设 \(j\) 二进制位 \(1\) 的个数(也就是选择作为运动员的个数)是 \(now\)。
考虑从之前的转移。分两种情况讨论。
如果 \(i>p+now\),那么这个人不是观众,所以直接加上作为运动员的贡献即可。
如果 \(i\le p+now\),那么这个人是观众,所以还要减去这个人当前作为观众贡献,然后第 \(p+now\) 个人就成为了观众,需要加上此人的贡献。
时间复杂度 \(\Theta(np2^p)\)

int n,p,m,msk;
struct JTZ{
	int au,pl[maxm];
	bool operator < (const JTZ x) const {
		return this->au > x.au;
	}
}a[maxn];
ll f[2][139];
int main(){
	n=read(); p=read(); m=read(); msk=(1<<p)-1; int i,j,k,now; for(i=1;i<=n;i++) a[i].au=read();
	for(i=1;i<=n;i++) for(j=0;j<p;j++) a[i].pl[j]=read();
	sort(a+1,a+n+1); for(i=1;i<=m;i++) f[0][0]+=a[i].au;
	for(i=1;i<=n;i++) for(j=0;j<=msk;j++){
		now=0; f[i&1][j]=f[(i&1)^1][j]; for(k=0;k<p;k++) if(j&(1<<k)) now++;
		for(k=0;k<p;k++) if(j&(1<<k)){
			if(i>m+now) f[i&1][j]=mmax(f[i&1][j],f[(i&1)^1][j^(1<<k)]+a[i].pl[k]);
			else f[i&1][j]=mmax(f[i&1][j],f[(i&1)^1][j^(1<<k)]+a[i].pl[k]-a[i].au+a[m+now].au);
		}
	} print(f[n&1][msk]); return 0;
}

标签:Building,le,read,题解,CF1316E,贡献,观众,now,排球队
From: https://www.cnblogs.com/jiangtaizhe001/p/16881809.html

相关文章

  • CF1735E题解
    钦定\(p_1=0,p_2>0\),不难证明如果有解则一定存在\(p_2>p_1\)的解。考虑枚举和\(d_{1,1}\)是相同楼房,则\(p_2\)对于每一种情况有两种可能的位置:\(d_{1,1}+d_{2,i}\)......
  • P3188 [HNOI2007]梦幻岛宝珠 题解
    一道不错的dp题,下令原背包容量为\(m\)。注意到\(w_i=a\times2^b\)中\(a,b\)都比较小,尝试按照\(a\)或者\(b\)分组然后合并,但是显然如果我们按照\(a\)分组就......
  • 汉诺塔问题及其变种问题解法(cpp版本)
    普通汉诺塔问题1.问题描述有三个柱子A、B、C,A柱子上有n个圆盘,圆盘的大小不等,大圆盘的在下,小圆盘的在上。将A柱子上的圆盘全部移动到C柱子上。每次只能移动一个圆盘,而且......
  • 【题解】P2260 [清华集训2012]模积和(数学,整除分块)
    【题解】P2260[清华集训2012]模积和比较简单的一道推式子的题。(清华集训居然会出这种水题的吗)题目链接P2260[清华集训2012]模积和题意概述求\[\sum_{i=1}^{n}\sum......
  • 【题解】CF1485C Floor and Mod(二分答案,整除分块)
    【题解】CF1485CFloorandModemmm……NOIP考前两周,跟CSP考前一样(虽然最后并没有去考),写篇题解增加以下RP(雾)。提供一篇思路大体和题解区相同但用了二分写法的题解。......
  • P2254 [NOI2005] 瑰丽华尔兹 题解
    注意到可以设朴素转移方程\(f_{t,i,j}\)表示\(t\)时刻钢琴在\((i,j)\)时的最长滑动距离,这样复杂度是\(O(nmt)\)的,过不去。不过听说加点奇怪的优化能过?考虑一段时......
  • MySQL慢查询(下):问题解决,应用总结
    上篇回顾继上两篇:​​MySQL慢查询(上):你知道为啥会慢么?​​​​MySQL慢查询(中):正确的处理姿势,你get到了吗?​​在以上两篇内容中,我们一起探索了这些内容:SQL执行过程查询SQL为什......
  • 「题解」Codeforces 1098D Eels
    暴力是,每次挑出最小的两个合并。需要观察到没有产生贡献的次数很小。考虑最小的那个数的大小,如果一次合并没有产生贡献,那么最小的数至少\(\times2\).所以最多会有\(\mat......
  • [题解] [CSP-J 2022] 逻辑表达式 思路整理
    标签:分治。题目传送门:P8815[CSP-J2022]逻辑表达式题目大意给一个包含0、1、|、&、(、)的逻辑表达式(保证正确)。在计算表达式时采用“短路”策略:计算表达式a&b......
  • vs 加入目录下的文件不在解决方案窗口显示(我的是unreal,其他的也成立),必须手动加的问
    1、网上说的显示全部然后把非活动的包含,我的可能是项目太大,不行;2、使用一个foldertosolutionfolder插件,也不行,这个会将子文件夹单独生成一个项目;最后方案:删除*.sln文件,......