【NC204088】病毒擴散

題目鏈接:https://ac.nowcoder.com/acm/problem/204088
dp動態規劃
首先考慮在一條直線上傳播的情況,容易推出:

F[t][n]=F[t-1][n]+F[t-1][n-1]

由於在不同路徑上的傳播情況可以迭加,所以最終結果即爲:
ans=(0,0)到(x,y)路徑數 * F[t][n]
路徑數的dp公式也易推出:

dp[x][y]=dp[x-1][y]+dp[x][y-1]

ac代碼:

#include<bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;i++)
#define int long long
#define endl '\n'
using namespace std;
 
const int mod=998244353;
int n,m,k,x,y,z;
int F[5005][2005];
int F2[2005][2005];
 
void solve() {
    cin>>x>>y>>n;
    cout<<F[n][x+y+1]*F2[x+1][y+1]%mod<<endl;
}
 
#undef int
int main() {
    ios::sync_with_stdio(false);
    F[0][1]=1;
    rep(i,5002) rep(j,2002) {
        F[i][j]=(F[i-1][j]+F[i-1][j-1])%mod;
    }
    F2[0][1]=1;
    rep(i,2002) rep(j,2002) {
        F2[i][j]=(F2[i-1][j]+F2[i][j-1])%mod;
    }
    int T;cin>>T;
    while(T--) solve();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章