本蒟蒻感觉这道题不是很难,就是要用记忆化搜索,连怎么递归题目都告诉你了,字面很好理解。
可是我却WA了4个,递归的公式也和题目给的一样,哪位大佬能帮帮我改一下下,我一定会关注你的。(抱大腿)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll w[25][25][25];
ll dfs(ll a,ll b,ll c){
if(a<=0||b<=0||c<=0) return 1;
if(a>20||b>20||c>20) return dfs(20,20,20);
if(w[a][b][c]) return w[a][b][c];
if(a<b&&b<c) w[a][b][c]=dfs(a,b,c-1)+dfs(a,b-1,c-1)-dfs(a,b-1,c);
else w[a][b][c]=dfs(a-1,b,c)+dfs(a-1,b-1,c)+dfs(a-1,b,c-1)-dfs(a-1,b-1,c-1);
return w[a][b][c];
}
int main(){
ll a,b,c;
while(cin>>a>>b>>c){
if(a==-1||b==-1||c==-1)break;
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<dfs(a,b,c)<<endl;
}
return 0;
}