题意:
一只牛从地图左上角跳到地图右下角,每次落地点必须在起跳点的右下方(即至少下一行下一列),并且两个点内的数字不能相同,求合法的跳跃方案数。
题解:
此题数据较小,可以用暴力做。加强版在洛谷是蓝题加强的题目传送门,数据为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];
}
尾声:
蒟蒻蟑螂写解不易,如有漏错多多提醒——
本文介绍了一道关于牛在地图上按照规则跳跃的问题,使用暴力法求解合法方案数,通过四个循环枚举并判断数字差异来计算。适合初学者理解数组和基础递归算法的应用。
1878





