RE 求助
  • 板块P1464 Function
  • 楼主xk2013
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/2/7 21:33
  • 上次更新2025/7/1 18:30:09
查看原帖
RE 求助
998662
xk2013楼主2024/2/7 21:33

源码(C++ 14 (GCC 9)):

#include <cstdio>

long long int memory[25][25][25];

long long int w(long long int a, long long int b, long long int c);

int main(void)
{
	long long int a, b, c;
	while (a != -1 && b != -1 && c != -1)
	{
		scanf("%lld %lld %lld", &a, &b, &c);
		
		if (a == -1 && b == -1 && c == -1)
		{
			break;
		}
		
		printf("w(%lld, %lld, %lld) = %lld", a, b, c, w(a, b, c));
	}
	
	return 0;
}

long long int w(long long int a, long long int b, long long c)
{
	if (memory[a][b][c] != 0)
	{
		return memory[a][b][c];
	}
	else if (a <= 0 || b <= 0 || c <= 0)
	{
		return 1;
	}
	else if (a > 20 || b > 20 || c > 20)
	{
		memory[a][b][c] = w(20, 20, 20);
		return memory[a][b][c];
	}
	else if (a < b && b < c)
	{
		if (memory[a][b][c - 1] == 0)
		{
			memory[a][b][c - 1] = w(a, b, c - 1);
		}
		
		if (memory[a][b - 1][c - 1] == 0)
		{
			memory[a][b - 1][c - 1] = w(a, b - 1, c - 1);
		}
		
		if (memory[a][b - 1][c] == 0)
		{
			memory[a][b - 1][c] = w(a, b - 1, c);
		}
		
		memory[a][b][c] = memory[a][b][c - 1] + memory[a][b - 1][c - 1] - memory[a][b - 1][c];
		return memory[a][b][c];
	}
	else
	{
		if (memory[a - 1][b][c] == 0)
		{
			memory[a - 1][b][c] = w(a - 1, b, c);
		}
		
		if (memory[a - 1][b - 1][c] == 0)
		{
			memory[a - 1][b - 1][c] = w(a - 1, b - 1, c);
		}
		
		if (memory[a - 1][b][c - 1] == 0)
		{
			memory[a - 1][b][c - 1] = w(a - 1, b, c - 1);
		}
		
		if (memory[a - 1][b - 1][c - 1] == 0)
		{
			memory[a - 1][b - 1][c - 1] = w(a - 1, b - 1, c - 1);
		}
		
		memory[a][b][c] = memory[a - 1][b][c] + memory[a - 1][b - 1][c] + memory[a - 1][b][c - 1] - memory[a - 1][b - 1][c - 1];
		return memory[a][b][c];
	}
}

我用了记忆化搜索,结果 RE,本地样例可过。

2024/2/7 21:33
加载中...