解鎖螢幕
題目背景:
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表示東...