别问我怎么发现的,我最后一次WA就是直接w[20][20][20] = 1然后WA掉的
by xl0095 @ 2019-07-08 15:26:33
题目说了
```
既满足条件1又满足条件2
这种时候我们就按最上面的条件来算
```
by 塔罗兰 @ 2019-07-08 15:39:46
然而他这是在教我们这么算可以简单一点直接得到1,而不是条件1的优先级高于条件2,所以如果既满足条件1又满足条件2,用条件2也可以吧????(好像有点杠了,但我确实是这么理解的2333)
by xl0095 @ 2019-07-08 15:53:32
@[图灵冯诺依曼](/space/show?uid=111741) 然而他这是在教我们这么算可以简单一点直接得到1,而不是条件1的优先级高于条件2,所以如果既满足条件1又满足条件2,用条件2也可以吧????(好像有点杠了,但我确实是这么理解的2333)
by xl0095 @ 2019-07-08 15:53:55
@[xl0095](/space/show?uid=149398) 我是按条件1的优先级高于条件2算的,A了
按最上面的条件来算的意思就是条件1的优先级高于条件2吧?这是一个语文理解能力吧?
```cpp
include<bits/stdc++.h>
#define ll long long
using namespace std;
ll k[25][25][25]={0};
ll w(ll x,ll y,ll z)
{
if(x<=0||y<=0||z<=0)
return 1;
if(x>20||y>20||z>20)
return k[20][20][20];
if(k[x][y][z]>0)
return k[x][y][z];
if(x<y&&y<z)
{
k[x][y][z]=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z);
return k[x][y][z];
}
k[x][y][z]=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1);
return k[x][y][z];
}
int main()
{
ll a,b,c;
***************************************************************************************************************************************************************************************************
cin>>a>>b>>c;
while(a!=-1||b!=-1||c!=-1)
{
cout<<"w("<<a<<", "<<b<<", "<<c<<")"<<" = "<<w(a,b,c)<<endl;
cin>>a>>b>>c;
}
}
```
by 塔罗兰 @ 2019-07-08 16:11:00
最上面的条件来算并不意味着是在教我们这么算可以简单一点直接得到1吧?
by 塔罗兰 @ 2019-07-08 16:12:33
@[图灵冯诺依曼](/space/show?uid=111741) emmmm我刚刚单看他给的提示没有加上前一句的语境,意思确实是既满足1又满足2的时候就按条件1来算,可能是我代入感太强了,读的时候默认注释的意思就是为了让我们简化递归过程T T ; 另外谢谢你的代码,但你贴的代码有一点点小问题,就是如果输入的第一组数据是21 21 21, 这个程序就会运行出0,而不是1048576(之前没有搜到w(20, 20, 20));最后感谢你跟我说这么多,应该是我理解能力的问题了,自己在其他时候也经常理解错题意(八成是没救了),
by xl0095 @ 2019-07-08 18:04:41
@[图灵冯诺依曼](/space/show?uid=111741) 问题已经基本上得到解决了,谢谢大佬!!!!!!!(暴论
by xl0095 @ 2019-07-08 18:05:38