我恍然大悟,发现自己多打了三个"!"
by middle_set @ 2017-08-31 20:29:41
#然而又出现了一个问题,名为MLE
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int ans[21][21][21];
long long in[3]={0};
int out;
int w(int a,int b,int c){
if(a<=0||b<=0||c<=0)
return 1;
else if(ans[a][b][c])
return ans[a][b][c];
else if(a=20&&b=20&&c=20)
ans[20][20][20]=w(20,20,20);
else if(a<b&&b<c)
ans[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else
ans[a][b][c]=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 ans[a][b][c];
}
int main(){
memset(ans,0,sizeof(ans));
while(scanf("%lld%lld%lld",&in[0],&in[1],&in[2])){
if(in[0]!=-1&&in[1]!=-1&&in[2]!=-1)
break;
if(in[0]>20||in[1]>20||in[2]>20)
in[0]=in[1]=in[2]=20;
printf("w(%lld, %lld, %lld) = %d\n",in[0],in[1],in[2],w(in[0],in[1],in[2]));
}
}
```
by middle_set @ 2017-08-31 20:34:03
#错了这才是真正的MLE
```cpp
#include <iostream>
using namespace std;
int ans[21][21][21];
long long in[3]={0};
int out;
int w(int a,int b,int c){
if(a<=0||b<=0||c<=0)
return 1;
else if(ans[a][b][c])
return ans[a][b][c];
else if(a==20&&b==20&&c==20)
ans[20][20][20]=w(20,20,20);
else if(a<b&&b<c)
ans[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else
ans[a][b][c]=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 ans[a][b][c];
}
int main(){
for(int i=0;i<21;i++)
for(int j=0;j<21;j++)
for(int k=0;k<21;k++)
ans[i][j][k]=0;
while(scanf("%lld%lld%lld",&in[0],&in[1],&in[2])){
if(in[0]==-1&&in[1]==-1&&in[2]==-1)
break;
if(in[0]>20||in[1]>20||in[2]>20)
in[0]=in[1]=in[2]=20;
printf("w(%lld, %lld, %lld) = %d\n",in[0],in[1],in[2],w(in[0],in[1],in[2]));
}
}
```
by middle_set @ 2017-08-31 20:35:23
话说楼主你是一个人在自言自语吗
by wangshuheng3541 @ 2017-09-02 17:51:34
MLE是什么????
by wangshuheng3541 @ 2017-09-02 17:52:12