首页 > 其他分享 >[ABC134F] Permutation Oddness 题解

[ABC134F] Permutation Oddness 题解

时间:2024-10-17 22:01:48浏览次数:5  
标签:Oddness 匹配 int 题解 贡献 考虑 ABC134F dp

[ABC134F] Permutation Oddness 题解

朴素的想法显然是状压 dp,枚举选择的子集,但复杂度不可接受。

考虑优化。注意到对于 \(p_i\),它的贡献只会有两种可能性,\(+p_i,-p_i\)。于是初步的想法是按照 \(p_i\) 的正负性选择分类。考虑到对于相同正负性的选择 \(p\),其是等价的。

于是我们设 \(dp_{i,j,k}\) 表示前 \(i\) 个 元素和位置,有 \(j\) 组决定向 \(i\) 之后去匹配,贡献为 \(k\) 的方案数。

对于 \(i\) 位置和其元素,考虑计算其有几组向前匹配了。

  • 如果匹配了一组,显然 \(j\) 不变,方案数是 \(i\) 向前 \(j\) 个匹配的方案数 \(\times 2\)(考虑元素和位置都可以匹配)和 \(i\) 元素和位置自己匹配的方案数。

  • 匹配两组时,\(i-1\) 有 \(j+1\) 组向后匹配,于是同理方案数是 \((j+1)^2\)。

  • 不匹配的方案数显然是 \(1\)。

\(j\) 的转移讨论过之后,考虑 \(k\) 的转移。考虑到 \(k\) 的贡献是 选择的一对 \((i,j)\) 之间的差,显然向后匹配一次其贡献 \(+1\),\(j\) 组意味着有 \(2j\) 个元素,于是 \(k\leftarrow k-2j\)。

三个转移式不再写出。

题目的关键是注意到 \(p\) 的贡献只有两种,于是考虑合并相同 \(p\) 贡献的情况。优化 dp 的方法之一的本质是 合并本质相同的状态

代码:

#include <bits/stdc++.h>
#define N 55
#define int long long
#define mod 1000000007
using namespace std;
int n, m;
int dp[N][N][N * N];
void add(int &x, int y) {
	x += y;
	if (x > mod)
		x -= mod;
}
signed main() {
	cin >> n >> m;
	dp[0][0][0] = 1;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j <= i; j++)
			for (int k = 2 * j; k <= m; k++) {
				add(dp[i][j][k], dp[i - 1][j][k - 2 * j] * (2 * j + 1) % mod);
				add(dp[i][j][k], dp[i - 1][j + 1][k - 2 * j] * (j + 1) % mod * (j + 1) % mod);
				add(dp[i][j][k], j >= 1 ? dp[i - 1][j - 1][k - 2 * j] : 0);
			}
	cout << dp[n][0][m] << "\n";
	return 0;
}

标签:Oddness,匹配,int,题解,贡献,考虑,ABC134F,dp
From: https://www.cnblogs.com/Rock-N-Roll/p/18473199

相关文章

  • P4229 某位歌姬的故事 题解
    P4229某位歌姬的故事题解\(n\le9\times10^8\),显然复杂度不与\(n\)相关。\(m\le500\),显然可以接受\(O(Tm^2)\)的做法。对于\([l,r]\),考虑套路地将端点离散化,使得复杂度只和关键点个数有关。考虑对于\([l,r,m]\),离散化后被分成了\(a_1,a_2,\cdots,a_p\)段,那么这些段的......
  • ZZJC新生训练赛第四场题解
    ZZJCACM新生训练赛-2024.10.16题目难度Easy(简单):B,C,D,GMedium(中等):A,EAnti-AK(防AK):EC题解题思路A页既可以是彩印也可以是黑白印,B页只能是彩印,所以只要比较A页彩印和A页黑白印的价格高低就好。因为a,b,x,y最大都是1e9,用int直接相乘的话会爆掉,所以......
  • DMA连续发送多帧但是只有最后一帧数据发出问题解决方法
    问题描述DMA连续发送多帧但是只有最后一帧数据发出原因分析DMA发送未完成时,下次DMA请求启动,导致之前的数据被放弃传输了解决办法创建DMA发送缓冲区,当启动DMA请求的时候,检测DMA设备是不是正在忙,如果正在忙,就把数据放入发送缓冲区等待,上次DMA发送完成的时会产生DMA发送完......
  • 【学校训练记录】10月个人训练赛3个人题解
    A:根据题意我们可知,第一种事件为从1到i的和,第二种事件为从y到i的和故我们可以通过前缀和来保存从i到i+1所化的时间。再遍历寻找最小值即可#include<bits/stdc++.h>#defineendl"\n"#defineintlonglongusingnamespacestd;intn,a[1010];voidsolve(){ cin>>n;......
  • 题解:GZOI2024 D2T2 乒乓球
    考场上切了,但是比较神奇的题,应该是蓝/紫。Discription乒乓球\(\text{}\)时间限制:\(\bold{3}\)秒众所周知,一场乒乓球比赛共有两个玩家\(A\)和\(B\)参与,其中一场比赛由多局比赛组成,而每局比赛中又由多盘比赛组成。每盘比赛\(A\)或\(B\)只有一名选手获胜。当其中一名......
  • [题解]P1311 [NOIP2011 提高组] 选择客栈
    P1311[NOIP2011提高组]选择客栈P6032选择客栈加强版只要\([l,r]\)区间之内存在一个\(i\)使得\(w[i]\lep\),这个区间就是符合条件的。所以我们遍历每一个元素\(i\),根据贪心的思想我们维护\([1,i]\)区间内满足\(w[i]\lep\)的最大\(i\),记为\(mp\)。对于每个元素\(i\),寻找\(......
  • 【题解】twt studio2024 萌新欢乐赛
    迟来的题解本文更新到个人主页中,后续如果有任何修正变动也只会在网页端更新~特别鸣谢小羽毛在羽猫球一题的题解:)感谢兴航学弟在T3的题解。比赛链接:https://www.luogu.com.cn/contest/196515T1签到题,所有参与选手均满分。略。T2https://www.luogu.com.cn/article/37n1idam......
  • P9731 [CEOI2023] Balance 题解
    首先考虑\(S=2\)怎么做,我们把它转化为图论问题。对于每一行的两个点的颜色连一条无向边,那我们相当于要给这些边定向。最后要求\(|in_u-out_u|\le1\)。会发现这个要求很像欧拉回路。但是欧拉回路是要求每个点的入度和出度相等,怎么办呢?我们再建一个超级源点,向每个奇数度数的点......
  • 常见ElasticSearch 面试题解析(上)
    前言ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,......
  • 2024-10-17每日一题题解
    最大子段和题目描述给出一个长度为\(n\)的序列\(a\),选出其中连续且非空的一段使得这段和最大。样例输入72-43-12-43样例输出4题解tips:无脑暴力法:枚举每一段区间,再对每一段区间求和,时间复杂度为\(O(n^3)\),会超时(n为1e5,则应该在\(O(nlogn)\)的时间范围内)......