mediocre_ @ 2023-07-04 07:06:15
#include<bits/stdc++.h>
using namespace std;
int w(int a, int b, int c) {
if (a <= 0 && b <= 0 && c <= 0) return 1;
if (a > 20 && b > 20 && c > 20) return w(20, 20, 20);
if (a < b && b < c) return w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
}
int main() {
while (1) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a == -1 && b == -1 && c == -1) return 0;
printf("w(%d, %d, %d) = %d\n", a, b, c, w(a, b, c));
}
return 0;
}
by newamnesia @ 2023-07-04 07:12:11
@Mr_Huang12
可以试着推一下,你这样暴力模拟分支会非常多,所以并不是简单的按照题意写出函数。这道题需要其他的解法
至于你为什么MLE,可能是你连题意都没读清楚吧……你自己先重新看看哪里写错了再想优化吧。
by _zzzzzzy_ @ 2023-07-04 07:13:14
@Mr_Huang12 你TLE了,你可以算一下复杂度,要记忆话搜索