通过1万多人的题目数据不可能有问题。。。。。。
by syksykCCC @ 2019-01-20 11:50:04
测试数据没有错
by 霍士弘 @ 2019-02-01 10:37:54
@[danmuking](/space/show?uid=170486)
by 霍士弘 @ 2019-02-01 10:38:01
@[ibilibili](/space/show?uid=167289) 难道是2倍w(20,20,20)?
by ihesro @ 2019-08-15 22:24:37
@[ibilibili](/space/show?uid=167289) 我改成2*w(20,20,20)对了3个
by ihesro @ 2019-08-15 22:27:59
@[danmuking](/space/show?uid=170486) 我也怀疑数据有问题,因为测试点里出现了w(某大于20的数, 某大于20的数, 某大于20的数) = 1048576,都是大于20的数的话应该是按条件二返回w(20,20,20),我这里程序算的w(20, 20, 20) = 524288,求大佬解释一下是怎么回事,恕我无知!
by ihesro @ 2019-08-15 22:29:11
如果不是数据有问题的话请来看的大神帮我看一下代码是不是有什么问题,代码如下:
```c
#include <stdio.h>
#include <string.h>
int a[100],b[100],c[100],l[100],m[100],n[100],h[20][20][20];
bool k[20][20][20];
int d=0;
void ccin(){
int e,f,g;
scanf("%d%d%d",&e,&f,&g);
if(e==-1 && f==-1 && g==-1){
return;
}else{
a[d]=e;
b[d]=f;
c[d]=g;
if(e>20 || f>20 ||g>20){
if(e<=0 || f<=0 || g<=0){
e=0;
f=0;
g=0;
}else{
e=21;
f=21;
g=21;
}
}
l[d]=e;
m[d]=f;
n[d]=g;
d++;
ccin();
}
}
int w(int e,int f,int g){
if(k[e][f][g]){
return h[e][f][g];
}
int j;
if(e<=0 || f<=0 || g<=0){
return 1;
}else{
if(e>20 || f>20 || g>20){
j=2*w(20,20,20);
return j;
}else{
if(e<f && f<g){
j=w(e,f,g-1)+w(e,f-1,g-1)-w(e,f-1,g);
h[e][f][g]=j;
k[e][f][g]=1;
return j;
}else{
j=w(e-1,f,g)+w(e-1,f-1,g)+w(e-1,f,g-1)-w(e-1,f-1,g-1);
h[e][f][g]=j;
k[e][f][g]=1;
return j;
}
}
}
}
int main(){
memset(k,0,sizeof(k));
ccin();
for(int i=0;i<d;i++){
printf("w(%d, %d, %d) = %d\n",a[i],b[i],c[i],w(l[i],m[i],n[i]));
}
return 0;
}
```
by ihesro @ 2019-08-15 22:31:18