洛谷P4825 [USACO15FEB] Cow Hopscotch S题解+标程

本文介绍了一道关于牛在地图上按照规则跳跃的问题,使用暴力法求解合法方案数,通过四个循环枚举并判断数字差异来计算。适合初学者理解数组和基础递归算法的应用。

题目传送门

题意:

        一只牛从地图左上角跳到地图右下角,每次落地点必须在起跳点的右下方(即至少下一行下一列),并且两个点内的数字不能相同,求合法的跳跃方案数。

题解:

        此题数据较小,可以用暴力做。加强版在洛谷是蓝题加强的题目传送门,数据为750,要用线段树维护但是楼主太蒻暂时写不出题解,所以这篇写的是暴力做法

        用 s[i][j] 表示走到 (i,j) 点的方案数,只要暴力四个循环枚举当前在 (i,j) 这个点可以走到 (l,k)这个点,每个点以数字是否相同进行判断得出方案,记得取模

理论成立,代码开始:

        这题比较水,主体是我题解第二段讲的推方案,后面不分段分析了,大家有不懂可以评论提问。

#include<bits/stdc++.h>
using namespace std;
int r,c,k,s[105][105],a[105][105];
int main()
{
	cin>>r>>c>>k;
	s[1][1]=1;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			for(int l=i+1;l<=r;l++)
			{
				for(int k=j+1;k<=c;k++)
				{
					if(a[i][j]!=a[l][k])
					{
						s[l][k]+=s[i][j];
						s[l][k]%=1000000007;
					}
				}
			}
		}
	}
	cout<<s[r][c];
}

尾声:

        蒟蒻蟑螂写解不易,如有漏错多多提醒——

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值