小w 偶然間見到了乙個dag。
這個dag 有m 層,第一層只有乙個源點,最後一層只有乙個匯點,剩下的每一層都有k 個節點。
現在小w 每次可以取反第i(1 < i < n - 1) 層和第i + 1 層之間的連邊。也就是把原本從(i, k1) 連到(i + 1, k2) 的邊,變成從(i, k2) 連到(i + 1, k1)。
請問他有多少種取反的方案,把從源點到匯點的路徑數變成偶數條?
答案對998244353 取模。
考慮用dp,
因為k<=10,而路徑數隻分奇偶,那可以用二進位制來表示,
設\(f_\)第i層的路徑數狀態位s的方案數。
根據邊轉移就可以了,
但是這樣時間複雜度位\(o(n2^kk^2)\)
考慮優化,讀入的每個點連出去的邊都可以用二進位制來表示,用位運算,這樣就變成\(o(nk2^k)\)的了。
#include #include #include #include #include #include #include #include const int maxlongint=2147483647;
const int mo=998244353;
const int n=10005;
using namespace std;
int f[n][1034];
int n,m,b[n][12][12],mi[12],fb[n][12][12],bb[n][12],bc[n][12];
int read(int &n)
int main()
} printf("%lld",f[n][0]);
}
Noip2017提高組 乳酪
noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...
NOIP2017提高組 列隊
noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...
NOIP 2017 提高組 寶藏
傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...