首页 > 其他分享 > [CSP-S2019] Emiya 家今天的饭

[CSP-S2019] Emiya 家今天的饭

时间:2022-09-28 09:55:32浏览次数:77  
标签:int && ans Emiya S2019 CSP mod

P5664 CSP-S2019 Emiya 家今天的饭

容斥原理+DP 答案=没有限制3的答案-∑某一列不满足性质3的答案, 记号:行表示方案,纵表示食材
第2类: 不满足性质3的只有一种列(必须>k/2)于是求和只需枚举列超过1/2的,令枚举的这列为c
设f[i][j][k]表示前i行,第c列选j个,其余列选k个的方案数(其中s[i]表示第i行的和)
转移: f[i][j][k] = f[i-1][j][k] + a[i][c]f[i-1][j-1][k] + (s[i]-a[i][c])f[i-1][j][k-1]
优化: f[i][t]表示前i行,j-k=t的方案数,统计答案时只找t>0的 ; 初始: f[0][0] = 1
转移: f[i][t] = f[i-1][t] + a[i][c]f[i-1][t-1] + (s[i]-a[i][c])f[i-1][t+1]
第1类: 类似前面的转移;设g[i][j]表示前i行选j个的方案数 ; 初始: g[0][0] = 1
转移: g[i][j] = g[i-1][j] + s[i]*g[i-1][j-1]

点击查看代码


#include <stdio.h>
#include <string.h>
const int N = 105, M = 2e3 + 5, mod = 998244353;
typedef long long LL;
int n, m, a[N][M], s[N];
int f[N][N << 1], g[N][N];
int ans;
int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i ++)
		for(int j = 1; j <= m; j ++)
			scanf("%d", &a[i][j]), (s[i] += a[i][j]) >= mod && (s[i] -= mod);
	for(int c = 1; c <= m; c ++) {
		memset(f, 0, sizeof(f)), f[0][n] = 1; // 由于t可能是负数,将下标+n
		for(int i = 1; i <= n; i ++)
			for(int t = n - i; t <= n + i; t ++)
				f[i][t] = (f[i-1][t] + (LL)a[i][c] * f[i-1][t-1] % mod + LL(s[i]-a[i][c]+mod) * f[i-1][t+1] % mod) % mod;
		for(int i = 1; i <= n; i ++) (ans += f[n][n + i]) >= mod && (ans -= mod);
	}
	(ans = mod - ans) >= mod && (ans -= mod), g[0][0] = 1;
	for(int i = 1; i <= n; i ++) {
		g[i][0] = g[i - 1][0];
		for(int j = 1; j <= n; j ++)
			g[i][j] = (g[i - 1][j] + (LL)s[i] * g[i - 1][j - 1] % mod) % mod;
	}
	for(int i = 1; i <= n; i ++) (ans += g[n][i]) >= mod && (ans -= mod);
	printf("%d\n", ans);
	return 0;
}

标签:int,&&,ans,Emiya,S2019,CSP,mod
From: https://www.cnblogs.com/azzc/p/16736983.html

相关文章

  • CSP-S模拟13
    全nm构造题,我爆零了T1.排序我读错题了……以为这是个普通的冒泡排序。因为需要用到所有的逆序对,所以每一次操作只能减少一个逆序对。考虑从小到大归位,我们按从大到小的顺......
  • CSP 2022 备战 时间复杂度
    如果我们要对一个程序进行评级,可以通过什么?最显著的,自然是通过测试点评价其次,就是通过时间复杂度与空间复杂度来评级了由于空间一般是十分充足的,UKE的报错情况少之又少......
  • CSP-S模拟8
    全是\(JOI\)的题……为什么不做本民族的题(恼)T1.选举原以为是一道神奇贪心,所以写了\(O(n)\)的转移,但是发现\(n<=500\),这……都不用跑都知道假了。好吧,是一道dp——我们把n......
  • CSP-S模拟13排序 Xorum 有趣的区间问题 无聊的卡牌问题
    T1【构造+规律】:给你一个排列,要你求逆序对数量,把原序列的逆序对位置当成交换,进行任意排列使得最后序列升序。(n<=1000)一:排列的实质是id[i]=i的一一对应,问题互相转化会更简......
  • CSP202203_3
    CSP202203_3目录CSP202203_3题目思路Code题目计算资源调度器思路直接模拟,画个大致的分析图即可理清题目要求。一个区上有多个节点,一个应用有多个任务。一个任务只占......
  • CSP-S模拟13
    又是模拟退役的一天A.排序死因:输出没有让前面小于后面通过找规律发现交换两个数值相邻的一定可以原因是这样保证每次操作只减少一个逆序对code#include<bits/std......
  • CSP模拟13
    套路题不会。考虑重修一下。T1经过考后的采访,joke3579、gtm1514、Chen_jr、Muel_imj四个人考场上写的Checker都拍过了然后都挂了零。实际上从前往后扫,只要交换每个位置......
  • 做题记录整理dp13 P7914 [CSP-S 2021] 括号序列(2022/9/26)
    P7914[CSP-S2021]括号序列非常考思维的思维题(甚至做到了让全广西都恐惧(似乎广西连拿暴力分的人都没有))由于看了题解,所以这题相当于是在巨人的肩膀上做题了。。。而且......
  • 做题记录整理dp13 P5664 [CSP-S2019] Emiya 家今天的饭(2022/9/26)
    P5664[CSP-S2019]Emiya家今天的饭终于遇到一个我感觉在考场上有可做出来的题了。。。唯一想不到的就是最开始的容斥(也就是说还是看了题解。。。),如果容斥想到的话其他......
  • CSP-S模拟12
    喜欢写博客的前提是得会改题……好难啊如果明天能收到生日礼物,或者一句生日快乐的话,我会非常快乐的,并且祝福你rp++ A.开挂发现改变之后的得到的结果是唯一确定的,为了......