NOI模擬(5 4) CQOID2T1 解鎖螢幕

2021-08-19 17:59:19 字數 1891 閱讀 4276

解鎖螢幕

題目背景:

5.4 

模擬cqoi2018d2t1 

分析:狀壓dp

比較明顯是狀壓,一開始以為是子集列舉,然後看資料範圍覺得自己涼了,所以就先跳過了,最後導致沒有做這道題,然後涼涼涼,考完發現是一道簡單題·····定義

f[i][stats]

表示已經當前已經用了狀態

stats

裡的點,那麼直接列舉下乙個點走**即可,可以先

n3預處理出兩兩點對之間經過哪些點,這樣就可以在轉移中

o(1)

判定轉移是否合法了,因為複雜度有一些卡,在列舉轉移的時候不能直接

for每一位,可以直接每一次提取

lowbit

,這樣的複雜度是

o(n2 * 2n)

常數比較小,可以在時限內通過。

source:

/*

created by scarlyw

*/#include #include #include #include #include #include #include #include #include #include #include #include inline char read()

return *s++;}

///*

templateinline void r(t &x)

for (x = 0; isdigit(c); c = read())

x = ((x << 2) + x << 1) + (c ^ '0');

if (iosig) x = -x;

}//*/

const int out_len = 1024 * 1024;

char obuf[out_len];

char *oh = obuf;

inline void write_char(char c)

templateinline void w(t x)

}inline void flush() /*

templateinline void r(t &x)

//*/

const int mod = 100000000 + 7;

const int maxn = 20;

long long f[maxn][1 << maxn | 1];

struct point

point(int x, int y) : x(x), y(y) {}

inline point operator + (const point &a) const

inline point operator - (const point &a) const

inline int operator * (const point &a) const

inline int operator ^ (const point &a) const

} p[maxn];

int n;

int id[1 << maxn | 1], cnt[1 << maxn | 1];

int able[maxn][maxn];

inline void read_in()

}able[i][j] = able[j][i] = stats;

}}inline void solve()

y = z;}}

long long ans = 0;

for (int i = 0; i <= tot; ++i)

if (cnt[i] > 3)

for (int j = 0; j < n; ++j)

ans += f[j][i];

std::cout << ans % mod;

}int main()

NOI模擬(5 3) CQOID1T2 社交網路

社交網路 題目背景 5.3 模擬cqoi2018d1t2 分析 矩陣樹定理 求有向圖的有根樹形圖,顯然對於有根的樹形圖是可以直接用矩陣樹定理的,那麼直接建出入度矩陣和鄰接表矩陣,入度矩陣 鄰接表矩陣獲得基爾霍夫矩陣。直接去掉 1號點所在行列直接求就可以了。複雜度 o n3 source create...

NOI模擬(5 3) CQOID1T3 交錯序列

交錯序列 題目背景 5.3 模擬cqoi2018d1t3 分析 dp 矩陣快速冪 第一反應看到資料範圍就覺得,可以直接 o n o n 搞過去,但是很遺憾常數過大,至少我沒有卡過去,換種思路考慮化簡一下。那麼我們只需要求得所有方案中 0的個數的 i次方之和 0 i a b 那麼我們定義 f i j ...

NOI1997 Day2 T1 最佳遊覽

noi1997 day2 t1 最佳遊覽 time limit 1000ms memory limit 65536k total submit 219 accepted 112 description input 第一行是兩個整數m和n,之間用乙個空格符隔開,n表示旅遊城南北向林萌道的條數,m表示東...