玄关,求调
查看原帖
玄关,求调
759120
luogu_MeiFengqi楼主2024/8/17 09:18

在线求调

RE代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[25][25][25];
int dfs(int a,int b,int c)
{
	if(a<=0||b<=0||c<=0) return 1;
	if(a>20||b>20||c>20&&!dp[20][20][20]) dp[20][20][20]=dfs(20,20,20);
	if(!dp[a-1][b][c]) dp[a-1][b][c]=dfs(a-1,b,c);
	if(!dp[a-1][b-1][c]) dp[a-1][b-1][c]=dfs(a-1,b-1,c);
	if(!dp[a-1][b][c-1]) dp[a-1][b][c-1]=dfs(a-1,b,c-1);
	if(!dp[a-1][b-1][c-1]) dp[a-1][b-1][c-1]=dfs(a-1,b-1,c-1);
	if(!dp[a][b][c-1]) dp[a][b][c-1]=dfs(a,b,c-1);
	if(!dp[a][b-1][c-1]) dp[a][b-1][c-1]=dfs(a,b-1,c-1);
	if(!dp[a][b-1][c]) dp[a][b-1][c]=dfs(a,b-1,c);
	if(a<b&&b<c) dp[a][b][c]=dp[a][b][c-1]+dp[a][b-1][c-1]-dp[a][b-1][c];
	else dp[a][b][c]=dp[a-1][b][c]+dp[a-1][b-1][c]+dp[a-1][b][c-1]-dp[a-1][b-1][c-1];
	return dp[a][b][c];
}
signed main(){
	int na,nb,nc;
	while(~scanf("%lld%lld%lld",&na,&nb,&nc))
	{
		if(na==-1&&nb==-1&&nc==-1) break;
		printf("w(%lld, %lld, %lld) = ",na,nb,nc);
		printf("%lld\n",dfs(na,nb,nc));
	}
	return 0;
}

TLE代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[25][25][25];
int dfs(int a,int b,int c)
{
	if(a<=0||b<=0||c<=0) return 1;
	if(a>20||b>20||c>20) dp[20][20][20]=dfs(20,20,20);
	if(a<b&&b<c) dp[a][b][c]=dfs(a,b,c-1)+dfs(a,b-1,c-1)-dfs(a,b-1,c);
	else dp[a][b][c]=dfs(a-1,b,c)+dfs(a-1,b-1,c)+dfs(a-1,b,c-1)-dfs(a-1,b-1,c-1);
	return dp[a][b][c];
}
signed main(){
	int na,nb,nc;
	while(~scanf("%lld%lld%lld",&na,&nb,&nc))
	{
		if(na==-1&&nb==-1&&nc==-1) break;
		printf("w(%lld, %lld, %lld) = ",na,nb,nc);
		printf("%lld\n",dfs(na,nb,nc));
	}
	return 0;
}
2024/8/17 09:18
加载中...