小 f 是乙個能鴿善鵡的同學,他經常把事情拖到最後一天才去做,導致他的某些日子總是非常匆忙。
比如,時間回溯到了 2018 年 11 月 3 日。小 f 望著自己的任務清單:
看 ig 奪冠;
補月賽題的鍋。
小 f 雖然經常咕咕咕,但他完成任務也是很厲害的,他一次性可以完成剩餘任務的任一非空子集。比如,他現在可以選擇以下幾種中的一種:
看 ig 奪冠;
補月賽題的鍋;
一邊看 ig 奪冠的直播,一邊補鍋。
當然,比賽實在是太精彩了,所以小 f 就去看比賽了。
不過,當金雨從天而降、ig 舉起獎盃之時,小 f 突然心生愧疚——鍋還沒補呢!於是,小 f 的內心產生了一點歉意。
這時小 f 注意到,自己總是在某些情況下會產生歉意。每當他要檢查自己的任務表來決定下一項任務的時候,如果當前他幹了某些事情,但是沒乾另一些事情,那麼他就會產生一定量的歉意——比如,無論他今天看沒看比賽,只要沒有補完月賽的鍋,他都會在選擇任務的時候產生 11 點歉意。小 f 完成所有任務後,他這一天的歉意值等於他每次選擇任務時的歉意之和。
過高的歉意值讓小 f 感到不安。現在,小 f 告訴你他還有 n 項任務,並告訴你在 m 種情況中的一種的情況下,小 f 會產生 ai點歉意。請你幫忙計算一下,小 f 在那一天所有可能的完成所有任務方式的歉意值之和是多少。
由於答案可能很大,你只需要輸出答案對 998244353取模即可。
輸入格式:
輸入一行兩個整數 n, m,表示有 n 項任務,在 m種情況中下小 f 會產生歉意值。
輸入接下來 m 行,每行有乙個長度為 n 的 0-1串 和乙個歉意值 ai,ai為 0/1表示第 j項任務此時沒做 / 已經做了。
詳情請參考樣例和樣例解釋。
輸出格式:
輸出一行乙個整數,表示小 f 在那一天所有可能的完成任務方式的歉意值之和對 998244353取模的結果。
一開始寫的時候,把時間複雜度的(2^20*2^20)算成了(2^21)成功t飛
沒t的那幾個點也忘了取模……
其實這道題只用組合數就好
乙個狀態的貢獻在於經過他有幾種方案到達最終態
所以我們可以發現,這是乙個組合數問題
比如說我們一共有5個任務,當前完成了3個任務
那麼轉移到完成3個任務的情況有
從00000轉移到任選3個完成
從有1個轉移到有3個
從有2個轉移到有3個
我們發現,由於我並不用確定到底選的是哪個
只用考慮選了幾個
所以選i個的情況總數就是
(原諒我直接搬了luogu的圖)
然後對於每種有貢獻的情況分別考慮即可
#include#include#include
#include
#include
#include
#include
#define p 998244353
#define rii register int i
#define rij register int j
#define int long long
using
namespace
std;
int zhs[55][55],n,m,opt[55],ans,c[25][25
];void
ycl()
}opt[
0]=1
;
for(rii=1;i<=20;i++)
}}signed main()
while
(isdigit(ch))
scanf(
"%lld
",&val);
ans+=(((val*opt[zt])%p)*opt[n-zt])%p;
ans%=p;
}cout
<
}
洛谷11月月賽 T2 不開心的金明
傳送門 一樣大水題,不過我現在都不知道我是怎麼被hack的。題目裡有這麼一句話 要求購物單上所有的物品 的極差 最貴的減去最便宜的 不超過3 資料範圍裡還有這麼一句話 min vi vi min vi 3 那麼,其實只有四種 了。我們稱它們為0,1,2,3 然後預處理每種 選i個的最大價值 直接暴力...
洛谷 3月月賽T4 序列 貪心構造 DP
傳送門 luogup5241 一波找規律嘗試出n 4n 4 n4分做法,然而實際上是個貪心構造轉dp 考慮如何構造出一組合法序列 首先讓所有邊首尾相連形成鏈,如果scc數量產生變化,就縮鏈上開頭的一部分。在兼顧scc數量變化的同時,其它邊均貪心地用於串鏈,直到所有點都被串在了鏈上 這時就可以隨便連了...
2023年9月15日提高組模擬賽 T3 密室
給定一些點的先決條件,問到達終點至少需要經過幾個點 可以把點與點之間的距離看作1,然後跑最短路 需要注意的事判斷的過程中弱國乙個乙個去判斷速度太過抵消,可以用狀態壓縮的方法表示一種狀態,正常轉移即可 include include include include using namespace st...