话说我大概明白了,先试试
by Starlit_Night @ 2020-03-16 22:09:56
我加上了
```cpp
if(a>20) a=20;
if(b>20) b=20;
if(c>20) c=20;
```
之后,全部WA,求解
by Starlit_Night @ 2020-03-16 22:12:01
![](https://cdn.luogu.com.cn/upload/image_hosting/r1ykvfcv.png)
by Starlit_Night @ 2020-03-16 22:13:23
加上那三行之后的代码是:
```cpp
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
//#include <bits/stdc++.h>
#define MAXN 210000000
#define MINN -210000000
using namespace std;
typedef long long ll;
ll dp[22][22][22];
ll w(ll a,ll b,ll c) {
if(a<=0||b<=0||c<=0) return 1;
else if(dp[a][b][c]!=0) return dp[a][b][c];
else if(a>20||b>20||c>20) {
return dp[a][b][c]=w(20,20,20);
} else if(a<b&&b<c) {
return dp[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)+w(a,b-1,c);
} else {
return dp[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);
}
return dp[a][b][c];
}
int main() {
ll a,b,c;
while(cin>>a>>b>>c) {
memset(dp,0,sizeof(dp));
if(a==-1&&b==-1&&c==-1) break;
if(a>20) a=20;
if(b>20) b=20;
if(c>20) c=20;
printf("w(%lld, %lld, %lld) = ",a,b,c);
cout<<w(a,b,c)<<endl;
}
return 0;
}
```
by Starlit_Night @ 2020-03-16 22:14:07
你在main函数中就已经把 a,b,c赋值为20了,那么 在运行递归函数中 如何让你的函数 判断这个是>20 >20 >20 的呢??
by Malixin1234 @ 2020-03-28 20:57:22