考虑暴力状压 DP。

按行 DP,记录列哪些被选过,可以做到 \(O(2^kk^2)\)。

注意到某一列扫完了之后这一列选没选过不重要,可以减少这里的状态。

简单优化一下,每次选择最少的一列,使这一列一定被减少一。

然后就可以过了,卡不满。

Code
const int N=1e5+5,mod=1e9+7;
int x[60],y[60],a[60],b[60],v[60],val[60][60],fac[N];
int ca[60],cb[60];
unordered_map<ll,int> f[60],g[60];
int main() {
int n=read(),k=read();
FOR(i,1,k) a[i]=x[i]=read(),b[i]=y[i]=read(),v[i]=(0ll+mod+read()-1)%mod;
fac[0]=1;
FOR(i,1,n) fac[i]=1ll*fac[i-1]*i%mod;
sort(a+1,a+k+1),sort(b+1,b+k+1);
int al=unique(a+1,a+k+1)-a-1,bl=unique(b+1,b+k+1)-b-1;
FOR(i,1,al) FOR(j,1,bl) val[i][j]=-1;
FOR(i,1,k) {
x[i]=lower_bound(a+1,a+al+1,x[i])-a;
y[i]=lower_bound(b+1,b+bl+1,y[i])-b;
val[x[i]][y[i]]=v[i],ca[x[i]]++,cb[y[i]]++;
}
f[0][0]=1;
while(1) {
int id=0;
FOR(i,1,bl) if(cb[i]&&(id==0||cb[i]<cb[id])) id=i;
if(id==0) break;
FOR(i,1,al) if(val[i][id]!=-1&&ca[i]) {
ca[i]=0;
vi S;
ll all=((1ll<<k)-1)<<1;
FOR(j,1,bl) if(val[i][j]!=-1) {
S.pb(j),cb[j]--;
if(cb[j]==0) all^=(1ll<<j);
}
FOR(j,0,k) for(auto u:f[j]) {
g[j][u.fi&all]=(g[j][u.fi&all]+u.se)%mod;
for(int l:S) if(!(u.fi&(1ll<<l)))
g[j+1][(u.fi|(1ll<<l))&all]=(g[j+1][(u.fi|(1ll<<l))&all]+
1ll*u.se*val[i][l]%mod)%mod;
}
FOR(j,0,k) swap(f[j],g[j]),g[j].clear();
}
}
int ans=0;
FOR(i,0,k) for(auto u:f[i]) ans=(ans+1ll*fac[n-i]*u.se%mod)%mod;
printf("%d\n",ans);
}

CF468E Permanent 题解的更多相关文章

  1. [题解] Codeforces 468 E Permanent 折半,DP,图论

    题目 建立一个二分图,左右各n个点,在左边的第x个点和右边的第y个点之间连一条权值为\(a_{x,y}\)的边.根据"积和式"的定义,我们是要在矩阵中选择n个位置,满足任意两个位置 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Apache Dubbo 官方正式发布 Spring 6 & Spring Boot 3 支持

    Dubbo 简介 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java.Golang 等多语言 SDK 实现.使用 Dubbo 开发的 ...

  2. 开源库libcli的安装与使用

    源码:https://github.com/dparrish/libcli 环境 Ubuntu 20.04.2 LTS 编译libcli 参考:README.md 按照libcli中的 README ...

  3. 将git仓库从submodule转换为subtree

    三个脚本 Alexander Mikhailian cat .gitmodules |while read i do if [[ $i == \[submodule* ]]; then mpath=$ ...

  4. [python] Python map函数总结

    Python map函数总结 本文主要介绍如何使用Python(Python3版本)的内置map()函数.简单来说map()函数会将指定的函数依次作用于某个序列的每个元素,并返回一个迭代器对象.map ...

  5. [生命科学] snapgene 构建载体方法分享

    snapgene 构建载体方法分享 文章目录 snapgene 构建载体方法分享 1. Snapgene 构建载体-酶切位点法 2. 载体构建--同源重组法 3. 总结 1. Snapgene 构建载 ...

  6. Spark通信框架RPC介绍

    Spark通信框架RPC介绍 内容安排: 1.RPC原理 2.nio操作 3.netty简单的api 4.自定义RPC框架 RPC原理学习 什么是RPC RPC(Remote Procedure Ca ...

  7. 升级csproj文件为vs2017工程格式(SDK样式)

    csproj文件在VS2017后格式变更为SDK样式.framework项目如果需要源链接等等功能,需要进行手动升级. 升级过程 升级需要Project2015To2017Nuget包. > d ...

  8. Maui 读取外部文件显示到Blazor中

    Maui 读取外部文件显示到Blazor中 首先在maui blazor中无法直接读取外部文件显示 ,但是可以通过base64去显示 但是由于base64太长可能影响界面卡顿 这个时候我们可以使用bl ...

  9. 《Effective C++》模版与泛型编程

    Item41:了解隐式接口和编译期多态. 纵使你从未使用过templates,应该不陌生"运行期多态"和"编译期多态"之间的差异.因为它类似于"哪一个 ...

  10. Nexus私有maven库部署和使用

    原文地址:Nexus私有maven库部署和使用 - Stars-One的杂货小窝 前段圣诞节前后,Jitpack网站突然崩溃了,无法下载依赖,然后过了一个星期才解决了,好在没啥紧急的Android开发 ...