dp+容斥原理(初级)
Grid2
Grid2题解
简述:
正确性可以保证
因为dp[i]表示不经过任何障碍,然后抵达i这个点的方案数,而i本身就是障碍物,所以枚举j就相当于枚举从(1,1)出发,并且第一次经过的障碍物是j,这样子能够绝对保证计算方案不重不漏
树形dp+容斥
https://codeforces.com/gym/103427/problem/L
#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define endl '\n'
using namespace std;
const int N = 4010,mod=998244353,M=2010;
int f[N][M][2],g[M][2],infact[N],fact[N],sz[N];
vector<int> e[N];
int qmi(int a,int k){
int res=1;
while(k){
if(k&1) res=res*a%mod;
a=a*a%mod;
k>>=1;
}
return res;
}
void init(){
fact[0]=infact[0]=1;
for(int i=1;i<N;i++)fact[i]=fact[i-1]*i%mod;
infact[N-1]=qmi(fact[N-1],mod-2);
for(int i=N-2;i>=1;i--) infact[i]=infact[i+1]*(i+1)%mod;
}
int C(int n,int m){
return fact[n]*infact[m]%mod*infact[n-m]%mod;
}
void dfs(int u,int fa){
sz[u]=f[u][0][0]=1;//选了0条边
for(auto v:e[u]){
if(v==fa) continue;
dfs(v,u);
for(int i=0;i<=sz[u]/2;i++){
for(int j=0;j<=sz[v]/2;j++){
g[i+j][0]=(g[i+j][0]+f[u][i][0]*(f[v][j][0]+f[v][j][1])%mod)%mod;
g[i+j][1]=(g[i+j][1]+f[u][i][1]*(f[v][j][0]+f[v][j][1])%mod)%mod;
g[i+j+1][1]=(g[i+j+1][1]+f[u][i][0]*f[v][j][0]%mod)%mod;
}
}
for(int i=0;i<=sz[u]/2+sz[v]/2+1;i++){
f[u][i][0]=g[i][0],f[u][i][1]=g[i][1];
g[i][0]=g[i][1]=0;
}
sz[u]+=sz[v];//可以将看似n^3的复杂度的树形dp转化为n^2复杂度
}
}
void solve() {
int n;cin>>n;
for(int i=1;i<n*2;i++){
int u,v;cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);
int ans=fact[2*n]*infact[n]%mod*qmi(qmi(2,n),mod-2)%mod;
// cout<<ans<<endl;
for(int i=1;i<=n;i++){//x条边
int res=(f[1][i][0]+f[1][i][1])*fact[2*n-2*i]%mod*infact[n-i]%mod*qmi(qmi(2,n-i),mod-2)%mod;
// cout<<res<<endl;
if(i%2==1) ans-=res;
else ans+=res;
if(ans>mod) ans-=mod;
if(ans<0) ans+=mod;
}
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
init();
int T=1;
// cin>>T;
while (T--) solve();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下