40分求助,#1234AC,#567WA
  • 板块P1464 Function
  • 楼主zzh6666663
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/27 02:15
  • 上次更新2023/11/2 17:55:22
查看原帖
40分求助,#1234AC,#567WA
920990
zzh6666663楼主2023/9/27 02:15
#include<iostream>
#include<cstring>
#define index -1
using namespace std;

long long w(long long a, long long b, long long c);
long long mem[25][25][25];//哈希记忆数组,初始化为-1

int main(){
	memset(mem, index, sizeof(mem));
	long long a, b, c;
	
	while(cin >> a >> b >> c){
		if(a==-1 && b==-1 && c==-1){
			break;
		}
		cout << "w("  << a << ", " << b << ", " << c << ") = ";
		if(a>20){
			a = 21;
		}else if(b>20){
			b = 21;
		}else if(c>20){
			c = 21;
		}
		
		cout << w(a, b, c) << endl;
	}
	
	return 0;
}

long long w(long long a, long long b, long long c){
	if(a<=0 || b<=0 || c<=0){
		return 1;
	}
	
	long long &hash = mem[a][b][c];
	
	if(hash != -1){
		return hash;
	}
	
	if(a>20 || b>20 || c>20){
		hash = w(20, 20, 20);
	}else if(a<b && b<c){
		hash = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c);
	}else{
		hash = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1);
	}
	
	return hash;
}
2023/9/27 02:15
加载中...