比赛 20150424 评测结果 ATTTTTTTTTTTTTT
题目名称 牛跳房子 最终得分 6
用户昵称 STARGAZER 运行时间 14.052 s
代码语言 C++ 内存使用 2.38 MiB
提交时间 2015-04-24 10:34:03
显示代码纯文本
/*
1953. 牛跳房子
★   输入文件:hopscotch.in   输出文件:hopscotch.out   简单对比
时间限制:1 s   内存限制:256 MB
【题目描述】
就像有些人喜欢玩Hopscotch游戏一样,农夫约翰的奶牛们发明了这个游戏的一个变种,
自己玩。重达一吨笨拙动物玩Cow Hopscotch,几乎总是以不幸告终,但令人惊讶的是,
这无法阻止奶牛们几乎每天下午都玩儿这个游戏。
该游戏有一个R*C(2 < = R≤750,2<=C <= 750)的网格,
其中每一个格子里有一个[1..K]里的整数(1<=K<=R*C)。奶牛们从左上方开始,
通过连续的跳跃移动到右下角,当且仅当满足以下条件,跳跃才是有效的:
1)你可以跳到一个与当前数值不同的方格上,
2)你要从当前正确的方块至少向下跳一行,
3)你要从当前正确的方块至少向右跳一列。
请帮助奶牛们计算他们从左上到右下方有多少种不同的有效跳跃序列方案。
【输入格式】
第一行包含三个整数R、C和K
下面有R行,每行都包含C个整数(每个都在[1..K]中)。
【输出格式】
输出一个数,即可以从左上连续跳跃至右下方的不同的方案数(mod 1000000007)。
【样例输入】
4 4 4
1 1 1 1
1 3 2 1
1 2 4 1
1 1 1 1
【样例输出】
5
*/
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
long long c,r,k,num=0;
pair<int,int> p;
vector<int> v(750,0);
vector<vector<int> > m(750,v);
void dfs(int x,int y)
{
	for(int i=x+1;i<r;i++)
	{
		for(int j=y+1;j<c;j++)
	    {
			if(m[i][j]!=m[x][y])
			{
				if(i==r-1&&j==c-1)
				{
					num++;
					if(num==1000000007)
						num=0;
				}
				else
					dfs(i,j);
			}
		}
	}
}
int main()
{
	freopen("hopscotch.in","r",stdin);
	freopen("hopscotch.out","w",stdout);
	cin>>r>>c>>k;
	for(int i=0;i<r;i++)
	{
		for(int j=0;j<c;j++)
		    cin>>m[i][j];
	}
	dfs(0,0);
	cout<<num<<endl;
	return 0;
}