LGP5664题解
厉害。
对于每一列选的数最多占一半,我们得设计一个三维 DP。然而状态刚好够,但是转移明显炸了(而且似乎还需要多项式?)
考虑正难则反,DP 不合法的方案数。总方案数很好算。
发现不合法的方案数只有某一列的出现次数超过一半,直接枚举这一列。设当前列为第 \(k\) 列。
设 \(dp_{i,x,y}\) 为前 \(i\) 行,当前列选了 \(x\) 个,其他列共选了 \(y\) 个的方案数。
再设第 \(i\) 行的 \(a\) 之和为 \(S[i]\),容易有:
\]
复杂度 \(O(mn^3)\),可以获得 \(84\) 分。
注意到在统计答案时计算的是 \(\sum_{x>y}dp_{n,x,y}\),我们只关心 \(x\) 是否比 \(y\) 大,考虑重新设状态。
设 \(dp_{i,x}\) 表示前 \(i\) 行的选择中,当前列比其他列多选了 \(x\) 个(\(x\) 可以为负数)。转移方程和刚才几乎一致:
\]
复杂度 \(O(mn^2)\)。
#include<cstdio>
typedef unsigned ui;
const ui M=105,mod=998244353;
ui n,m,S[M],a[M][2005],dp[M][M<<1],f[M][M];
inline ui DP(const ui&x){
	ui sum(0);dp[0][n]=1;
	for(ui i=1;i<=n;++i){
		const ui&c1=a[i][x],&c2=mod+S[i]-a[i][x];
		dp[i][n-i]=1ll*c2*dp[i-1][n-i+1]%mod;dp[i][n+i]=1ll*c1*dp[i-1][n+i-1]%mod;
		for(ui j=n-i+1;j<=n+i-1;++j)dp[i][j]=(dp[i-1][j]+1ull*c1*dp[i-1][j-1]+1ull*c2*dp[i-1][j+1])%mod;
	}
	for(ui i=1;i<=n;++i)sum=(sum+dp[n][n+i])%mod;
	return sum;
}
signed main(){
	ui sum(0);scanf("%d%d",&n,&m);
	for(ui i=1;i<=n;++i)for(ui j=1;j<=m;++j)scanf("%u",a[i]+j),S[i]=(S[i]+a[i][j])%mod;
	for(ui i=1;i<=m;++i)sum=(sum+DP(i))%mod;
	f[0][0]=1;
	for(ui i=1;i<=n;++i){
		f[i][0]=1;
		for(ui j=1;j<=i;++j)f[i][j]=(f[i-1][j]+1ll*S[i]*f[i-1][j-1])%mod;
	}
	for(ui i=1;i<=n;++i)sum=(sum+mod-f[n][i])%mod;
	printf("%u",sum?mod-sum:0);
}
看了题解才会,太菜了/kk
LGP5664题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
		我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ... 
- noip2016十连测题解
		以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ... 
- BZOJ-2561-最小生成树 题解(最小割)
		2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ... 
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
		Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ... 
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
		题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ... 
- 2016ACM青岛区域赛题解
		A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ... 
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
		http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ... 
- 网络流n题 题解
		学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ... 
- CF100965C题解..
		求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ... 
随机推荐
- Shell编程中的用户输入处理
			Linux read命令用于从标准输入读取数值. read 内部命令被用来从标准输入读取单行数据.这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据. 语法 read [-er ... 
- 创建spring boot项目并添加多个模块时,启动报 错误: 找不到或无法加载主类
			最近建个项目发现启动报,找不到或无法加载主类,想想肯定是自己配置出问题了,经过排查确实出问题了,(根pom中的bulid为移到子模块中去导致的),下面演示下正确的创建子模块的步奏 1. 创 ... 
- Java高级特性——反射
			感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ... 
- Mybatis foreach的用法
			本文援引:https://www.cnblogs.com/fnlingnzb-learner/p/10566452.html 在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况 ... 
- IPV4地址学习笔记
			IP地址由网络号和主机号组成.IPV4由32位正整数来表示. A类IP:8位网络号+24主机号,网络号以0开头,网络号范围0~127 B类IP:16位网络号+16主机号,网络号以10开头,网络号范围1 ... 
- js获取 url?后面的参数取值
			function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest ... 
- 如何使Label显示时,一行顶部居中,两行靠左显示----董鑫
			有时我们会碰到这种情况,一个要根据内容显示一行还是两行,一行时还要靠着顶部再居中,比如下面 最左边的名称,要求是靠上的,如果按照正常的方式写的话,可能一行的话就会出现居中显示了,不会顶着头部显示. 我 ... 
- Linux重定向输出到以当前时间命名的文件 / date命令格式化输出
			1. 利用date命令重定向到以当前时间命名的文件 例如: ls -l > mylog_$(date +"%Y-%m-%d_%H-%M-%S").log 或: ls -l & ... 
- python基础语法_9-0函数概念
			http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ... 
- 解决OpenOCD烧录STM32失败, 无法通过SWD连接的问题
			OpenOCD烧录STM32失败的问题 Linux下使用 OpenOCD 烧录 STM32, 出现了 Error: init mode failed (unable to connect to the ... 
