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 & ...
随机推荐
- 为什么要配置path环境变量
因为在jdk下bin文件夹中有很多我们在开发中要使用的工具,如java.exe,javac.exe,jar.ex等,那么我们在使用时,想要在电脑的任意位置下使用这些java开发工具,那么我们就需有把这 ...
- java中的静态变量,静态方法与静态代码块详解
java中的类的生命周期分为装载,连接,初始化,使用,和卸载五个过程. 而静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
- 用Java中的File类模拟实现对系统文件的增删改查效果
码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...
- 到底什么是TORCH.NN?
该教程是在notebook上运行的,而不是脚本,下载notebook文件. PyTorch提供了设计优雅的模块和类:torch.nn, torch.optim, Dataset, DataLoader ...
- Ubuntu18配置静态IP地址
1. 记住网卡名称 ifconfig 2. 记住网关地址 netstat -rn 3. 配置静态IP 注意:Ubuntu18固定IP的方式跟Ubuntu18之前版本的的配置方式不同, Ubuntu18 ...
- tarjan2
反过来调过去,我还是感觉没学明白缩点 讲一个有向图中的所有强连通分量缩成一个点后,构成的新图是一个DAG. 一个点所在的强连通分量一定被该点所在DFS搜索树所包含 树上的边大致分为:树枝边,前向边(从 ...
- HTTP缓存协议实战
一.什么是缓存 缓存,又称作Cache,我们把临时存储数据的地方叫做缓存池,缓存池里面放的数据就叫做缓存.当用户需要使用这些数据,首先在缓存中寻找,如果找到了则直接使用.如果找不到,则再去其他数据源中 ...
- 如何通过pid定位是哪个容器
此时,我有一个pid为28117的进程,通过pdwx命令,无法找到他所在的目录,此时我判定他是docker容器 pwdx 28117 输出如下 28117: / 通过docker ps -q命令,获取 ...
- 面试突击25:sleep和wait有什么区别
sleep 方法和 wait 方法都是用来将线程进入休眠状态的,并且 sleep 和 wait 方法都可以响应 interrupt 中断,也就是线程在休眠的过程中,如果收到中断信号,都可以进行响应,并 ...