求助大佬全RE

P1464 Function

```cpp if(a>0&&b>0&&c>0&&d[a][b][c]){ output=d[a][b][c]; } ``` 这里,如果 $a,b,c$ 远远大于 $20$,数组就会越界,导致 RE。 将 ```cpp else if(a>20||b>20||c>20){ return w(20,20,20); } ``` 移至最前面即可。
by _caiji_ @ 2021-07-24 09:20:31


@[caijianhong](/user/390033) 谢谢大佬,但是#1和#5 WA了
by ajahjahah @ 2021-07-24 09:26:45


```cpp #include<bits/stdc++.h> using namespace std; long long a,b,c,d[25][25][25]; long long w(long long a,long long b,long long c){ long long output; if(a>20||b>20||c>20){ return w(20,20,20); } else if(a>0&&b>0&&c>0&&d[a][b][c]){ output=d[a][b][c]; } else if(a<=0||b<=0||c<=0){ output=1; } else if(a<b&&b<c){ output=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c); } else{ output=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1); } if(a>0&&b>0&&c>0){ d[a][b][c]=output; } return output; } int main(){ while(cin>>a>>b>>c){ if(a==-1&&b==-1&&c==-1){ break; } printf("w(%lld, %lld, %lld) = %lld\n",a,b,c,w(a,b,c)); } return 0; } ``` 这是我的代码
by ajahjahah @ 2021-07-24 09:27:15


@[李嘉昇](/user/357378) 读题。 >absi2011 : 比如 $w(30,−1,0)$ 既满足条件 $1$ 又满足条件 $2$ 这种时候我们就按最上面的条件来算 所以答案为 $1$ 先判断 $\leq 0$,再判断 $>20$,顺序错了。
by _caiji_ @ 2021-07-24 09:57:43


@[caijianhong](/user/390033) 谢谢大佬,AC了 大佬NB!
by ajahjahah @ 2021-07-24 10:00:43


|