$n * m$的網格,對其進行黑白染色,問每一行每一列至少有乙個黑格仔的方案數。
考場上只會$n^3$的dp,還和指數級列舉乙個分qwq
設$f[i][j]$表示到了第$i$行,已經有$j$列被染黑,然後暴力轉移上一行有幾個黑格仔
正解是容斥
首先固定好列,也就是保證每一列都有乙個黑格仔
這樣的方案是$(2^n - 1) ^m$
然後容斥行
組合數暴力算即可
#include#include#include
#include
#include
#include
#include
#include
#include
#define pair pair#define mp(x, y) make_pair(x, y)
#define fi first
#define se second
#define int long long
#define ll long long
//#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? eof : *p1++)
//char buf[(1 << 22)], *p1 = buf, *p2 = buf;
using
namespace
std;
const
int maxn = 1e6 + 10, inf = 1e9 + 10, mod = 1e9 + 7
;const
double eps = 1e-9
;inline
intread()
while(c >= '
0' && c <= '
9') x = x * 10 + c - '
0', c =getchar();
return x *f;
}int
n, m;
ll fac[maxn], ifac[maxn], po2[maxn];
ll fastpow(
int a, int
p)
return
base %mod;
}ll c(
int n, int
m) main()
嵊州普及Day2T2
題意 對於n個數的數列,進行排列,求第m個大於此數列的數列。思路 查詢後2個是否逆序,若是,將後3個遞迴。如此運算,找後面大於此數中最小數交換,然後將後面數列順序排列。相對簡單。見 include include include include include using namespace std...
九校聯考DAY2T2 中國剩餘定理,積性篩
整除符號為 d n 在計算機語言中可被描述為 n d 0。現有一算式 n xm x m x,給定 n,m,求 1,n 以內 x 解的個數。解可能很大,輸出取模 998244353。其中 n 的給定方式是由 c 個不超過 t 的質數的乘積給出的,c 和 t 的範圍會在資料範圍中給出。第一行乙個 id ...
五校聯考3day2 A
這題考場考慮不太全 但相比於60,其它90分的人,還是很全的 long long我是開了的,然後後面的特判我也是加了的,可是竟然打錯了?其實這題不需要打的像我這樣麻煩 設a i 表示i點還需連線的邊數 ans表示sigma a i max表示max a i 如果max ans 2,就說明全部連項那個...