10分不知道有啥问题...
查看原帖
10分不知道有啥问题...
1165902
an_ya楼主2024/1/12 22:16
#include<iostream>
using namespace std;
int cnt;//计算方案总数
int R, C, K;
char show[200][200];
void dfs1(int u)//枚举每一行
{
	if (u > R)
	{
		return;
	}
	for (int i = 1; i <= C; i++)
	{
		int tmp = K;
		if (show[u][i] != '.')continue;
		for (int j = i; j <= i + tmp;j++)
		{
			if (show[u][j] == '.') tmp--;
			else break;
		}
		if (tmp <= 0) cnt++;
	}
	dfs1(u + 1);
}
void dfs2(int u)//枚举每列
{
	if (u > C)
	{
		return;
	}
	for (int i = 1; i <= R; i++)
	{
		int tmp = K;
		if (show[i][u] != '.')continue;
		for (int j = i; j <= i + tmp; j++)
		{
			if (show[j][u] == '.') tmp--;
			else break;
		}
		if (tmp <= 0) cnt++;
	}
	dfs2(u + 1);
}
int main()
{
	cin >> R >> C >> K;
	for (int i = 1;i <= R; i++)
	{
		for (int j = 1; j <= C; j++)
		{
			cin >> show[i][j];
		}
	}
	dfs1(1);
	dfs2(1);
	if (K == 1)cnt /= 2;
	cout << cnt;
	return 0;
}
2024/1/12 22:16
加载中...