打卡信奥刷题(1437)用C++实现信奥 P4825 [USACO15FEB] Cow Hopscotch S

P4825 [USACO15FEB] Cow Hopscotch S

题目描述

与人类喜欢玩跳格子游戏类似,Farmer John 的奶牛们也发明了自己的版本。游戏在一个 R×CR \times CR×C 的网格上进行(2≤R,C≤1002 \leq R,C \leq 1002R,C100),每个格子标有 1…K1 \ldots K1K 的整数(1≤K≤R×C1 \leq K \leq R \times C1KR×C)。奶牛从左上角出发,通过一系列有效跳跃到达右下角。跳跃被定义为有效当且仅当满足以下条件:

  1. 目标格子与当前格子的数字不同
  2. 目标格子位于当前格子下方至少一行
  3. 目标格子位于当前格子右侧至少一列

请计算从左上角到右下角的不同有效跳跃路径总数。

输入格式

第一行包含三个整数 RRR, CCC, KKK
接下来 RRR 行每行包含 CCC 个整数,每个数在 1…K1 \ldots K1K 范围内。

输出格式

输出从左上角到右下角的不同路径数量,结果对 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值