| 比赛 | 
    CSP2023-S模拟赛 | 
    评测结果 | 
    AAAAAAAAAAEEEEEEEEEE | 
    | 题目名称 | 
    Maximized Combos | 
    最终得分 | 
    50 | 
    | 用户昵称 | 
    liuyiche | 
    运行时间 | 
    2.184 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    12.58 MiB  | 
    | 提交时间 | 
    2023-10-17 20:17:56 | 
显示代码纯文本
#include<bits/stdc++.h>
        
using namespace std;
int n, m, s;
const int mod = 998244353;
int f[102][102][102][2];
inline int dfs(int step, int cnt, int one, int best)
{
    if(step == n+1)
    {
        if(m == one && best == 1)
             return 1;
        return 0;
    }
    if(f[step][cnt][one][best] != -1)
        return f[step][cnt][one][best];
    
    int all = 0;
    if(m-one < n-step+1)
        all += dfs(step+1,0,one,best);
    all %= mod;
    if(cnt+1 <= s && one+1 <= m)
    {
        if(cnt+1 == s)
            all += dfs(step+1,cnt+1,one+1,1);
        else
            all += dfs(step+1,cnt+1,one+1,best);
    }
    all %= mod;
    return f[step][cnt][one][best] = all;
}
        
int main()
{
    freopen("combos.in", "r", stdin);
   	freopen("combos.out", "w", stdout);
           	
    ios::sync_with_stdio(false);
   	cin.tie(0); cout.tie(0);
        
    cin >> n >> m;
    
    for (int i = 1; i <= m; ++i)
    {
        memset(f,-1,sizeof(f));
        s = i;
        cout << dfs(1,0,0,0) << '\n';
    }    
        	
   	return 0;
}