在线求调
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;
}