64 条题解
-
0
对于一个递归函数 w(a,b,c)
- 如果 a <= 0 或 b <=0 或 c <= 0就返回值1。
- 如果 a>10 或 b>10 或 c>10 就返回 w(10,10,10)
- 如果 a<b 并且 b<c就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,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)
注意:例如 w(30,-1,0) 又满足条件 1 又满足条件 2,请按照最上面的条件来算,答案为 1。 代码就按题目说的写,因为按最上面的条件来算,所以要按顺序写,最重要的是,要开long long, 不能太贪心的开unsigned long long,因为这是无符号,只有90,第二个测试点是负数,所以负数会变成非常大。 废话说了那么多,下面上代码:
#include <bits/stdc++.h> #define ll long long using namespace std; ll a,b,c; ll w(ll a,ll b,ll c) { if (a <= 0 || b <= 0 || c <= 0) { return 1; } else if (a > 10 || b > 10 || c > 10) { return w(10,10,10); } else if (a < b && b < c) { return w(a,b,c - 1) + w(a,b - 1,c - 1) - w(a,b - 1,c); } else { 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); } } signed main() { cin >> a >> b >> c; cout << "w(" << a << "," << b << "," << c << ")=" << w(a,b,c); return 0; }
信息
- ID
- 7
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 9573
- 已通过
- 2181
- 上传者