全部超时了,请大佬们看一看,谢谢

P1464 Function

@[wkl20110514](/user/775044) 不写记忆化的勇士
by RP_INT_MAX @ 2022-12-21 09:04:54


你这个没有记忆化搜索啊,反复算肯定会超时,把`w()`改成这样就可以(记得定义`f`) ```cpp LL w(LL a,LL b,LL c){ if(a<=0||b<=0||c<=0)return 1; if(a<=20&&b<=20&&c<=20&&f[a][b][c])return f[a][b][c]; if(a>20||b>20||c>20)return w(20,20,20); if(a<b&&b<c)return f[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c); return f[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); } ```
by Dr_Glitch @ 2022-12-21 09:08:14


刚才学习了一番记忆化,懂了懂了,谢谢
by wkl20110514 @ 2022-12-21 10:43:13


@[Dr_Glitch](/user/123823) 请问这个三维数组应该开多大呢?ABC不会有负数么?怎么办呀?
by wkl20110514 @ 2022-12-21 11:52:17


@[wkl20110514](/user/775044) 每一维开成20就可以了,前面的边界条件已经排除过负数的可能了呢(由于当数据大于20时会转化成小数据,所以需要记忆化的部分只有小于20的情况)
by Dr_Glitch @ 2022-12-21 13:59:05


知道了,谢谢
by wkl20110514 @ 2022-12-22 11:55:51


|