給你乙個n*m的方格圖,中間有k個障礙,要你求從左下角到右上角有多少種方案mod 998244353
這個題目真是很oi......
首先\(max(n,m)<=1e3\) 直接\(o(n^2)dp\)
如果方格數量很多,觀察障礙物很少,則可以想到容斥的思維
然後再用組合數學預處理一下
一定要注意要預處理到2e5 wa了我一輩子
#include#define fi first
#define se second
#define debug cout<
ll qpow(ll a,ll b)
b=b>>1;
base=base*base%mod;
}return ans;
}ll c(int a,int b)
void init()
}bool cmp(paira,pairb)
}void solve1()
}printf("%lld\n",dp[1][m+1]);
}void solve2()
bool flag=1;
for(int i=1;ipa[j].se)
ans+=1ll*c(n-pa[i].fi+pa[i].se,pa[i].se)*c(pa[i].fi-pa[j].fi+pa[j].se-pa[i].se,pa[i].fi-pa[j].fi)%mod*c(pa[j].fi+m-pa[j].se,pa[j].fi)%mod;}}
if(flag&&k==3)
ans=(ans%mod+mod)%mod;
printf("%lld\n",ans);
}int main()
if(k>=10)else
return 0;
}
交流 題解(容斥原理 組合數)
在此。給你n nn個字串,其中選擇k kk個,如果合法則將 變成字元 26 2626 個都可以,前提是合法 構成乙個只含小寫字母的字串,求可以變成多少種字串。合法要求 乙個位置上要不只有一種小寫字母,要不是 解法 可以用狀壓dpdp dp或者容斥原理 組合數完成。首先鋪墊三個內容 交集 並集 集合大...
題解 分特產 組合數 容斥
一道小水題。假如沒有這個要求每個人都要有乙個特產的限制我們直接可以組合數。我們又發現人 本質上 是沒有區別的,所以容斥的複雜度只有 o n n 個人分 m 個特產,每個特產有 a i 個,人可以不拿特產,的方案數就是把 a i 分成 n 份,而且可以分為 0 份。這個的答案就是 f n prod m...
組合數學 容斥 集合計數
首先我們知考慮只有一種交集 交集的大小為k,那麼有2n k個子集包含了這k個元素 確定k個元素,再從剩下n k個元素任意選取,有2n k種組合 用這2n k個子集能有2 2 n k 種組合,再減去1個空集 一共有ck n種交集,這樣得出tmp k ck n 2 2 n k 1 種方法 這裡面包含了交...