P4825 [USACO15FEB] Cow Hopscotch S
题目描述
与人类喜欢玩跳格子游戏类似,Farmer John 的奶牛们也发明了自己的版本。游戏在一个 R×CR \times CR×C 的网格上进行(2≤R,C≤1002 \leq R,C \leq 1002≤R,C≤100),每个格子标有 1…K1 \ldots K1…K 的整数(1≤K≤R×C1 \leq K \leq R \times C1≤K≤R×C)。奶牛从左上角出发,通过一系列有效跳跃到达右下角。跳跃被定义为有效当且仅当满足以下条件:
- 目标格子与当前格子的数字不同
- 目标格子位于当前格子下方至少一行
- 目标格子位于当前格子右侧至少一列
请计算从左上角到右下角的不同有效跳跃路径总数。
输入格式
第一行包含三个整数 RRR, CCC, KKK。
接下来 RRR 行每行包含 CCC 个整数,每个数在 1…K1 \ldots K1…K 范围内。
输出格式
输出从左上角到右下角的不同路径数量,结果对 100000000710000000071000000007 取模。
输入输出样例 #1
输入 #1
4 4 4
1 1 1 1
1 3 2 1
1 2 4 1
1 1 1 1
输出 #1
5
C++实现
#include<bits/stdc++.h>
#define int long long
const int mod = 1e9 + 7;
using namespace std;
int a[105][105], dp[105][105];
int read()
{
int i = 0, f = 1;
char ch;
for (ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar());
if (ch == '-')
{
f = -1;
ch = getchar();
}
for (; ch >= '0' && ch <= '9'; ch = getchar())
i = (i << 3) + (i << 1) + (ch ^ 48);
return i * f;
}
signed main()
{
int r = read(), c = read(), k = read();
for (int i = 1; i <= r; i++)
for (int j = 1; j <= c; j++)
a[i][j] = read();
dp[1][1] = 1;
for (int i = 2; i <= r; i++)
for (int j = 2; j <= c; j++)
for (int t1 = 1; t1 < i; t1++)
for (int t2 = 1; t2 < j; t2++)
if (a[t1][t2] != a[i][j]) dp[i][j] = (dp[i][j] + dp[t1][t2]) % mod;
printf("%lld", dp[r][c]);
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容