【LuoguP5289】[十二省联考2019] 皮配

UG476 GT Transceivers文档翻译和自身理解 对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解 阅读详情

题目链接

题目描述

略

Sol

一道背包问题

首先暴力做法设 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k] 表示前 i i i 个城市的学校被分到第一阵营 j j j 人 第一门派 k k k 人的方案数。

中间一个城市里的学校就再枚举是分到那个阵营然后01背包 dp 一下门派就行了。

然后似乎就没有什么 dp 上的优化空间了。

注意到 k = 0 k=0 k=0 时,一个学校被分到一个阵营后,它能够贡献人数的门派不会受到它被分配的阵营的影响。
所以我们可以先为所有的 k = 0 k=0 k=0 的学校分配好门派,这就是个01背包,之后再考虑阵营的问题。

由于一个城市要分到相同阵营,所以还得把一个城市里的所有学校一起考虑。

因为 k ≠ 0 k\neq 0 k̸​=0 的学校只有最多 30 30 30 个,而一所学校的人数最多 10 10 10 个,所以这一部分的方案我们可以直接用上最开始的暴力dp的方法算出。

这时我们要理清我们到底算出了什么方案。
首先我们后面部分的暴力dp求出了为所有有限制学校的城市的阵营分配和有限制学校的门派分配。
之前还算出了所有 k = 0 k=0 k=0 的城市的门派分配。
所以再算一个所有无限制城市阵营分配的方案数就行了,这还是个 01 背包。

然后怎么合并答案呢?
我们已经把方案分成了三部分:

  1. 无限制城市的人的阵营分配
  2. 无限制学校的人的门派分配
  3. 其他所有人的门派&阵营分配

我们在第三部分的方案上合并入上面两种方案,可以发现首先把阵营合并进来是不会有问题的,因为两部分是没有关系的。
然后再并入了一个无限制学校的门派的分配方案,由于我们已经保证所有城市的阵营合法,而阵营和门派是独立的,所以也是合法的。

用前缀和来优化最后合并答案的过程就行了。

code:

#include<bits/stdc++.h>
using namespace std;
#define Set(a,b) memset(a,b,sizeof(a))
template<class T>inline void init(T&x){
	x=0;char ch=getchar();bool t=0;
	for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') t=1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+(ch-48);
	if(t) x=-x;return;
}typedef long long ll;
const int mod=998244353;
const int N=1020;
const int MAXN=2601;
template<class T>inline void Inc(T&x,int y){x+=y;if(x>=mod) x-=mod;}
template<class T>inline void Dec(T&x,int y){x-=y;if(x < 0 ) x+=mod;}
inline int Sum(int x,int y){x+=y;if(x>=mod) x-=mod;return x;}
inline int Dif(int x,int y){x-=y;if(x < 0 ) x+=mod;return x;}
template<class T>inline int fpow(int x,T k){int ret=1;for(;k;k>>=1,x=(ll)x*x%mod) if(k&1) ret=(ll)ret*x%mod;return ret;}
vector<int> city[N];
struct school{
	int idc;int s;int hate;
	school(int _id=0,int _s=0,int _hate=-1){idc=_id,s=_s;hate=_hate;}
}P[N];
int C0,C1,D0,D1,c,curf=0,curg=0,sum=0,n;
int f[2][MAXN],g[2][MAXN];
int dp[MAXN][MAXN],F[MAXN][MAXN],G[MAXN][MAXN];
bool limcity[N];
inline int Calc(int i,int j){
	int lei=max(0,sum-i-C1),lej=max(0,sum-j-D1);// least
	int rei=C0-i,rej=D0-j;// most
	if(lei>rei||lej>rej) return 0;
	return (ll)Dif(f[curf][rei],(lei? f[curf][lei-1]:0))*Dif(g[curg][rej],(lej? g[curg][lej-1]:0))%mod;
}
int main()
{
	int k,T;init(T);
	while(T--) {
		Set(f,0),Set(g,0),Set(dp,0),Set(F,0),Set(G,0);curf=curg=sum=0;
		init(n),init(c);for(int i=1;i<=c;++i) city[i].clear(),limcity[i]=0;
		init(C0),init(C1),init(D0),init(D1);
		for(int i=1;i<=n;++i){P[i]=school();init(P[i].idc),init(P[i].s);city[P[i].idc].push_back(i);}
		init(k);
		for(int i=1;i<=k;++i){int pe,p;init(pe),init(p);P[pe].hate=p;limcity[P[pe].idc]=1;}
		f[curf][0]=g[curg][0]=1;
		for(int i=1;i<=c;++i) {
			if(!city[i].size()) continue;
			int SP=0;
			for(int v:city[i]) {
				school S=P[v];int s=S.s;
				if(S.hate!=-1) continue;SP+=s;
				sum+=s;curg^=1;int ed=min(sum,D0);
				for(int i=0;i<=ed;++i){
					g[curg][i]=0;
					Inc(g[curg][i],g[curg^1][i]);
					if(i>=s) Inc(g[curg][i],g[curg^1][i-s]);
				}
			}if(limcity[i]) continue;
			curf^=1;int ed=min(sum,C0);
			for(int i=0;i<=ed;++i){
				f[curf][i]=0;
				Inc(f[curf][i],f[curf^1][i]);
				if(i>=SP) Inc(f[curf][i],f[curf^1][i-SP]); 
			}
		}int nows=0;dp[0][0]=1;
		for(int i=1;i<=C0;++i) Inc(f[curf][i],f[curf][i-1]);
		for(int i=1;i<=D0;++i) Inc(g[curg][i],g[curg][i-1]);
		for(int i=1;i<=c;++i) {
			if(!city[i].size()) continue;
			if(!limcity[i]) continue;
			int SP=0,SS=0;
			int ed1=min(C0,nows),ed2=min(D0,nows);
			for(int j=0;j<=ed1;++j)for(int k=0;k<=ed2;++k) F[j][k]=G[j][k]=dp[j][k];
			for(int v:city[i]) {
				school S=P[v];int s=S.s;SP+=s;
				if(S.hate==-1) continue;
				else{
					nows+=s;SS+=s;sum+=s;
					ed1=min(C0,nows);
					ed2=min(D0,nows);
					for(int j=ed1;~j;--j){
						for(int k=ed2;~k;--k){
							F[j][k]=0;
							if(S.hate!=0&&j>=s&&k>=s) Inc(F[j][k],F[j-s][k-s]);//C0
							if(S.hate!=1&&j>=s) Inc(F[j][k],F[j-s][k]);
							if(S.hate==3) G[j][k]=0;
							if(S.hate!=2&&k>=s) Inc(G[j][k],G[j][k-s]);// C1
						}
					}
				}
			}int SG=SP-SS;// more
			nows+=SG;ed1=min(C0,nows),ed2=min(D0,nows);
			for(int j=0;j<=ed1;++j)
				for(int k=0;k<=ed2;++k) {
					//  F[j][k]  -->  dp[j+SG][k] C0
					//  G[j][k]  -->  dp[j   ][k] C1
					dp[j][k]=0;
					if(j>=SG) Inc(dp[j][k],F[j-SG][k]);
					Inc(dp[j][k],G[j][k]);
				}
		}int ans=0;
		for(int j=0;j<=C0;++j) for(int k=0;k<=D0;++k) Inc(ans,(ll)dp[j][k]*Calc(j,k)%mod);
		cout<<ans<<endl;
	}
	return 0;
}

相位编码脉冲压缩信号的理论研究与 Matlab 实现 通过实际的代码示例,我们展示了如何生成信号、进行相位编码、传输信号、相位解码和脉冲压缩的步骤。相位编码脉冲压缩信号是通过在发射端对信号进行相位编码,并在接收端对信号进行相位解码来实现的。其主要原理是在发射端将信号的频率进行调制,使得信号具有宽带特性,然后在接收端通过匹配滤波器对信号进行解调和压缩,从而提高信号的分辨率和抗干扰能力。相位编码脉冲压缩信号是一种在信号处理中常用的技术,用于提高信号的分辨率和抗干扰能力。可以使用 Matlab 中的信号生成函数生成一个宽带脉冲信号,例如矩形脉冲信号或高斯脉冲信号。 阅读详情

相关推荐

Vue3 + MQTT.js 实现 SCADA 实时数据通信:从不稳定到稳定的完整实践

本文介绍了SCADA组态引擎开发中MQTT协议的应用及优化实践。项目采用MQTT协议实现工业设备数据采集与可视化,但面临连接不稳定、数据格式多样化和数据绑定复杂三大问题。针对MQTT连接问题,分析发现超时设置过短(原8秒)、缺少客户端超时配置和心跳机制是主要原因。优化方案包括:协议转换(mqtt://→ws://)、双重超时保护(15秒手动+30秒客户端)、60秒心跳间隔等,显著提升了连接稳定性。通过完整代码实现展示了连接配置、认证处理和错误处理机制,为物联网数据传输提供了可靠解决方案。

weixin_36794508的博客 1398

[十二省联考2019]皮配 题解

题目:[十二省联考2019]皮配 设S等于各学校人数之和。 首先,有一个很简单的\(O(nM^2)\)的\(dp\):记录当前考虑到哪所学校,以及蓝阵营人数a,鸭派系人数b,最后,只要满足\(S-C1<=a<=C0\)且\(S-D1<=b<=D0\),这个方案就是合法的。 写上这个就有50分了。 注意到还有20分满足\(k=0\),即没有限制,考虑这部分的做法: ...

weixin_42465242的博客 351

机器学习系列(1)_逻辑回归初步

1、总述 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。 2、由来     要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:     线性回归能对连续值结果进行预测,

寒小阳 13万+

【十二省联考2019】皮配(背包神题)

传送门 我zxyoi学OI两年,什么场面没见过。 这场面我真没见过。 真正的DP好题,想清楚之后完全不难写。 虽然写完再去看觉得窒息得一批。 准确来说,这道题的考察内容就是背包计数。 是的,只有背包计数,除了乘法原理甚至可以说没有任何组合数学内容。 纯粹到极致的背包DP神仙题。 题解: 设SSS为sss之和,即总人数。 首先考虑低分暴力(因为正解里面会用到)。 直接维护三位导师旗下的学员人数进行...

zxyoi_dreamer的博客(不定期诈尸) 311

手把手搭建摄像头驱动(一):I2C设备树插件与OV5640实战

本文手把手指导如何搭建OV5640摄像头驱动,重点讲解I2C设备树插件的编写与实战应用。通过硬件连接验证、I2C驱动框架搭建、设备树插件编译及动态加载调试,系统介绍Linux驱动开发全流程,并提供常见问题解决方案,帮助开发者快速掌握摄像头驱动开发技术。

git9versioner的博客 755

变焦跟踪理论基础(如何在变焦过程中保持清晰)

如何在整个变焦过程中一直保持图像的清晰度或焦点是变焦跟踪的主要挑战。 当用户在缩放跟踪的情况下改变缩放时,设备保持对焦。 然而,在没有变焦跟踪的情况下,图像变得失焦,图像在变焦跟踪后由于自动对焦(AF)算法才最终对焦。...................................................

ChenYX的博客 20万+

洛谷 5289 [十二省联考2019]皮配——分开决策的动态规划

题目:https://www.luogu.org/problemnew/show/P5289 考场上只写了 50 分的 DP 。并且没意识到只记录两个导师的人数就行了,所以记了 3 个。不过写的记搜,还是得了 50 分。 #include<cstdio> #include<cstring> #include<algorithm> #includ...

weixin_34253539的博客 151

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段

本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。

weixin_42525551的博客 453

【动态规划】P5289 [十二省联考 2019] 皮配

题意 较长,略 分析 算法一 首先,考虑k=0的部分分,我们可以分别进行阵营和派系的选择,因为每个人都可以选择任意四个导师,所以阵营和派系的搭配是任意的,那么我们分别dp,然后把合法的方案乘起来即可 算法二 第二部分,我们可以设计dp,fi,j,k,0/1f_{i,j,k,0/1}fi,j,k,0/1​表示前 i 个学校选了 j 个蓝色阵营的人和 k 个鸭派系的人,且当前人选的阵营颜色为0/1的 方案数 有了这个状态就很容易转移了,因为选择红色和R的可以用总人数分别减去 j 和 k 表示,这样有效的减少了需

andyc_03的博客 475

MATLAB 2022b 用户专属:保姆级IPOPT求解器安装配置全流程(含OPTI工具箱)

本文为MATLAB 2022b用户提供IPOPT求解器的详细安装与配置指南,涵盖OPTI工具箱的适配安装、环境变量设置及常见问题解决方案。通过实战案例演示非线性优化问题的求解过程,帮助用户高效部署这一强大的优化工具,提升工程计算效率。

weixin_29092031的博客 406

SAP GUI 字段遮罩功能详解及实现

默认情况下,系统使用作为掩码模式,遮罩整个字段内容长度;对于货币金额类型,掩码后会保留小数位并在整数位部分全部显示为,如****.**若需自定义掩码模式,可利用以下方式:维护“Maintain Masking Pattern”节点,在其中定义新的掩码方式(如:只露出后四位,其他位以X替代等);实现 BAdI(或类似命名,具体以系统版本为准)的方法,通过 ABAP 代码读取原始值,并依据业务逻辑生成掩码字符串返回,动态替换界面输出值;

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 709

【洛谷 P5289】【十二省联考】—皮配(背包dp)

传送门 分成三类 不受影响的城市以及城市的学校 受影响的城市里不受影响的学校 受影响的学校 第一类可以直接O(nc)O(nc)O(nc)分别dpdpdp阵营和派系后乘起来 第二类可以和第一类一起dpdpdp派系但不考虑阵营 第三类暴力O(kc2)dpO(kc^2)dpO(kc2)dp即可 #include<bits/stdc++.h> using namespace std; cons...

Stargazer的博客 203

【GPFS专题4】---IBM Spectrum Scale (GPFS) 原理详解

IBM Spectrum Scale(原名为 GPFS,General Parallel File System)是一种高性能、分布式的集群文件系统,专为大规模数据共享和并行访问设计。它允许多个客户端同时访问共享文件,提供高可用性、容错性和扩展性,广泛应用于高性能计算(HPC)、大数据分析、AI 训练和企业级存储场景。IBM Spectrum Scale 通过分布式架构、并行访问和智能数据管理,为企业提供了高性能、高可用、可扩展的存储解决方案。

jundao1997的专栏 780

[十二省联考2019]皮配

题目链接 选一个派系和一个阵营可以唯一确定一名导师 因为每一个阵营里的导师都分别来自不同派系,所以k=0时,对阵营的选择是不影响对派系的选择的 唯一的限制就是同城市的要在同一个阵营 所以以每个城市为物品,物品大小为该城市的人数,阵营人数为背包容量,做背包dp 再以每个学校为物品,物品大小为该学校的人数,派系人数为背包容量,做背包dp 只用一维记录背包大小即可,因为总人数-背包里的人数=在另一个阵营...

weixin_30312659的博客 208

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【背包DP】LOJ3051 [十二省联考 2019]皮配

【题目】 LOJ 有222个阵营红蓝和两个派系鸭R,四位导师分别属于不同的阵营+派系搭配,有一些人来参加比赛: 一共有ccc个城市的nnn所不同学校,第iii所学校所属城市为bib_ibi​,有sis_isi​名选手。 现在要求来自同一城市的选手必须加入属于相同阵营的导师,来自同一学校的选手必须加入相同的导师。 另外有限制某kkk所学校不会加入某一位导师。 还有限制C0,C1,D0,D1C_0,C...

MEET YOU FIRST TIME 386

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【十二省联考 2019】皮配

题意 你有 $n$ 个集合,每个集合里有一些非负整数。 有 $4$ 个桶,现在要把每个非负整数放入其中 $1$ 个桶。 限制条件: 1. 同一集合的所有数要么都放入第 $1,2$ 个桶,要么都放入第 $3,4$ 个桶。 2. 有 $k$ 个数有特殊要求:不能放入前 $2$ 个桶或不能放入后 $2$ 个桶。 3. 设 $cnt_i$ 为第 $i$ 个桶放的数的总和,要求 $cnt_1+c...

weixin_30278311的博客 198

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

十二省联考2019酱油记

在中考前去省选玩一趟。 Day -1 对于一个还没有学会所有省选内容的初三Oier来说,这一趟真的是去打酱油的啊。但还是要认真复习。 最近几天在字符串的路上越走越远…晚上才开始复习图论。还有一大堆没有复习啊,怎么办? 明天还要去试机,好像是在南开,但是不知道在重庆具体的哪里。 Day 0 今天去南开试机~~(原来南开在沙坪坝那边)~~。机子是挺不错的,就是键盘摆的位置有点不是那么舒服。当时竟然没有...

TbYangZ的博客 1867

2019十二省联考游记

Day0 早上在机房复习复习模板,准备下午去试机时打打LCT/多项式各类运算什么的… 试机的时候发现键盘的线垫在下面很不爽.摇来摇去的. 然后晚上莫名和机房几位大佬一起被拉去与教练,家长们吃饭…(据说死刑犯上刑场前一天晚上都要吃顿好的…) 晚上颓了GC...(Inori赛高!!!)\textcolor{white}{颓了GC...(Inori赛高!!!)}颓了GC...(Inori赛高!!!) ...

Ark 1230

【LOJ3051】「十二省联考 2019」皮配

【题目链接】 点击打开链接 【思路要点】 考虑 k=0k=0k=0 的情况,可以发现对于阵营和派系的选择/限制相互独立,因此直接分开决策各个城市的阵营,以及各个学校的派系,再将答案相乘即可。 对于 k≠0k\ne0k̸​=0 的情况,将所涉及到的城市和学校拿出来单独 dpdpdp 即可,注意到拿出来的学校总人数不超过 ksksks ,本部分复杂度为 O(k2s×M)O(k^2s\tim...

cz_xuyixuan的博客 377

【NOI2019十二省联合省选】部分题简要题解

Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大。 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在[l,r][l,r][l,r]内,最大异或值为x,塞进堆里。每次取出堆顶,并将该三元组对应的区间分裂成两个,重新扔回堆里。计算区间最大异或值利用可持久化字典树。 时间复杂度O(nlog⁡n+Klog⁡M...

Never give in. 1075

LibreOJ #3051. 「十二省联考 2019」皮配 DP

题意 你猜。 分析 注意到当k=0时,派系和阵营的限制是互不干扰的,我们可以对学校和城市分开处理,然后把方案乘起来即可。 多了限制之后,我们只要把被限制的城市和学校单独拿出来dp就好了。 代码 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #includ...

beginend 298

「十二省联考 2019」皮配——dp

题目 【题目描述】 #### 题目背景一年一度的综艺节目《中国好码农》又开始了。本季度,好码农由 Yazid、Zayid、小 R、大 R 四位梦想导师坐镇,他们都将组建自己的梦想战队,并率领队员向梦想发起冲击。 四位导师的**派系**不尽相同,节目组为了营造看点,又将导师分成了不同的**阵营**,与此同时对不同阵营、不同派系都作出了战队总人数限制: - 四位导师分成两个**阵营**: -...

weixin_30493401的博客 188

[十二省联考2019]皮配(分类讨论的动态规划)

OI考场上正解爆零和不会有什么区别。 --鲁迅 可惜咱连正解都想不到 难得连着部分分加爆搜混了60分 结果 忘清一个数组 $60$->$10$ 我枯了 讲解开始 ①:有20分爆搜 ②:首先考虑k=0的情况 经过简单推理发现: 每个城市选择阵营和每个学校选择派系互不干扰 对于选阵营和选派系各自做一个01背包dp 结果就是二者的合理方案数相乘 ③:其次考虑有k的...

weixin_34059951的博客 199

DTOJ4352. 皮配

题意: 题目背景 一年一度的综艺节目《中国好码农》又开始了。本季度,好码农由 Yazid、Zayid、小 R、大 R 四位梦想导师坐镇,他们都将组建自己的梦想战队,并率领队员向梦想发起冲击。 四位导师的派系不尽相同,节目组为了营造看点,又将导师分成了不同的阵营,与此同时对不同阵营、不同派系都作出了战队总人数限制: 四位导师分成两个阵营: Yazid、小 R 两位导师组成蓝阵营,他们两位的战队人...

sz_165394732的博客 320

【十二省联考2019】皮配【分部dp】

教我写代码

Lstdo的博客 364
上一篇: 【BZOJ3684】大朋友和多叉树(拉格朗日反演)
下一篇: 【LuoguP5280】[ZJOI2019] 线段树
NeosKnight
博客等级 码龄9年 21粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值