重做下去年的csp題找找感覺,去年d1t2寫可持久化線段樹上二分的悲慘經歷讓我對d1t2充滿了厭惡(好吧其實是正解在簡單都懶得寫了),因此就來改這個去年沒調出來的dp了
首先這個主要食材佔一半一眼容斥,因此我們大體思路就有了
先求出不管這個限制的總方案數,設\(f_\)表示前\(i\)種方法中做了\(j\)道菜的方案數,記錄乙個每行的和顯然可以\(o(n^2)\)轉移
考慮大力列舉哪個食材\(p\)超過了\(\lfloor \frac\rfloor\),顯然可以再做一次dp,設\(g_\)表示前\(i\)種方法中做了\(j\)道菜的方案數,其中有\(k\)道菜使用了食材\(p\),轉移顯然
但這樣總複雜度是\(o(n^3m)\)無法通過,放一下**意思一下
#include#include#define ri register int
#define ci const int&
using namespace std;
const int n=105,m=2005,mod=998244353;
int n,m,a[n][m],f[n][n],g[n][n][n],sum[n],ans;
int main()
return printf("%d",ans),0;
}
我們仔細觀察一下轉移方程發現我們只需要知道後兩維的差即可(話說這一年做的agc中有太多這樣的套路了),因此直接壓成一維總複雜度就是\(o(n^2m)\)的了
#include#include#define ri register int
#define ci const int&
using namespace std;
const int n=105,m=2005,mod=998244353;
int n,m,a[n][m],f[n][n],g[n][n<<1],sum[n],ans;
int main()
return printf("%d",ans),0;
}
題解 LuoGu5664 Emiya 家今天的飯
原題傳送門 每行最多取乙個告訴我們可以枚舉行 所以這道題目總體複雜度裡肯定有行的複雜度o n o n o n 考場上寫的是m 2 3 m 2 3 m 2 3的暴力,直接把每一列分別取了幾個寫到狀態裡面去 正解需要考慮正難則反 我們寫直接將每行最多乙個當作大前提 要求的是沒有一列取了超過一半的東西 那...
P5664 Emiya 家今天的飯
miku 這個題很顯然的可以從部分分推到正解 64上去就是乙個四維dp,dp i j k z 表示在第1行的時候第一行選了j個,第2行選了k個,第3行選了z個的 情況下的方案數,轉移用手就能推。只是有個小細節 include include include include define int lo...
P5664 Emiya 家今天的飯
哭了qaq這題整了12345678天,在題解和sy的部落格幫助下完成了題目qaq 給出乙個n m的矩陣,總共選k個,不能不選,要求 1.每行只能選乙個 2.每列最多選 個求出合法方案數 抽象理解一下就是這麼個東西 直接求解莫得思路,然後正難則反,我們考慮總方案數 不合法方案數 考慮沒有任何限制,我們...