P5664 Emiya 家今天的飯

2022-04-06 14:29:26 字數 1276 閱讀 4982

miku

這個題很顯然的可以從部分分推到正解

64上去就是乙個四維dp,dp[i][j][k][z]表示在第1行的時候第一行選了j個,第2行選了k個,第3行選了z個的

情況下的方案數,轉移用手就能推。

只是有個小細節

#include#include#include#include#define int long long

using namespace std;

int n,m;

int ma[101][2001];

int mod=998244353;

int dp[101][41][41][41];

int ans;

signed main()

} dp[0][0][0][0]=1;

//我是 小細節

for(int i=1;i<=n;++i)

}} }

for(int i=0;i<=n/2;++i)

}} }

cout《要考慮更多的列,那何不壓縮一下,改成三維,前兩維一樣,但是第三維改成其餘行選了幾個

這樣的話,就要分開考慮每一列了。然後再運用一點點數學知識

顯然考慮合法方案很噁心,可是scz說說過「正難則反」%%%

求出所有解減去不合法的。

#include#include#include#include#define int long long

using namespace std;

int n,m;

int ma[101][2001];

int mod=998244353;

int dp[101][51][80];

int sum[101];

int ans=1;

int simex;

signed main()

//sum[i]%=mod;

ans=(ans*(sum[i]+1)%mod)%mod;

} //dp[0][0][0]=1;

for(int q=1;q<=m;++q)

if(z)}}

} for(int ii=1;ii<=n;++ii)

}simex=(simex+mod)%mod;

} } cout<<(ans-simex-1+mod)%mod;

return 0;

}

要想拿到這個,還要再壓一維。我們關心選了幾個嗎?不,正相反,這個差才是關心的。

又少了一位,但是差可能是個負數,最小是-n,那麼就全部加上乙個n。

P5664 Emiya 家今天的飯

哭了qaq這題整了12345678天,在題解和sy的部落格幫助下完成了題目qaq 給出乙個n m的矩陣,總共選k個,不能不選,要求 1.每行只能選乙個 2.每列最多選 個求出合法方案數 抽象理解一下就是這麼個東西 直接求解莫得思路,然後正難則反,我們考慮總方案數 不合法方案數 考慮沒有任何限制,我們...

P5664 Emiya家今天的飯 dp

對於n nn個方法,m mm個材料,乙個方法配對乙個材料可以做an,ma an,m 道菜。選擇k kk個配對要求 配對至少為k 1k 1 k 1每個配對的方法不同 每個材料最多用 k2 lfloor frac rfloor 2k 次 求做菜方案數 考慮容斥減去多餘方案,也就是要求乙個材料用超過一半。...

洛谷 P5664 Emiya 家今天的飯(DP)

觀察題目資料範圍,發現前64pts可以用類似狀壓的思想來做 m 3 前84pts可以在o n 3 m 的時間內完成。100pts需要在o n 2 m 的時間內做。總述 注意總的初始化,初始化要為1,因為後面有乘的操作,最後的時候再將那個多餘的1減去。64pts 設f i j k q 表示到第i行,第...