题解:B4401 [蓝桥杯青少年组国赛 2025] 第六题

· · 题解

B4401 [蓝桥杯青少年组国赛 2025] 第六题

题意

给定一个大小为 (h,w) 大小的网格,要求出从 (1,1)(h,w) 的路径中乘积值为 11 倍数的路径条数,答案对 10^9+7 取模。

思路

首先看到这道题,我们不难想到动态规划来解决这道题,但是可以看到数据范围为 10^7 我们就知道正常的动态规划数组肯定会爆空间,所以我们可以用滚动数组来存储这个行数,那么就很简单了,进行分类讨论:

那么这道题就简单的写完了,接下来放出整体代码。

Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+5;
const int MOD=1e9+7;
int dp[2][N][2];
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int n,m;
    cin>>n>>m;
    dp[0][1][0]=1;
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            int x;
            cin>>x;
            dp[i&1][j][0]=(dp[i&1][j-1][0]+dp[(i-1)&1][j][0])%MOD;
            if (x%11==0) dp[i&1][j][1]=dp[i&1][j][0];
            else dp[i&1][j][1]=(dp[(i-1)&1][j][1]+dp[i&1][j-1][1])%MOD;
        }
    }
    cout<<dp[n&1][m][1]%MOD;
    return 0;
}