1 条题解
-
1
#include<iostream> #include<cstring> using namespace std; long long f[25][25][25];//由于大于20数的值与dfs(20,20,20)相等,所以数组开到20多就行了 long long dfs(long long a,long long b,long long c) { if (a <= 0 || b <= 0 || c <= 0) return 1; if (a > 20 || b > 20 || c > 20) return dfs(20,20,20); if (a < b&&b < c) { if (f[a][b][c]==-1)//如果f没有赋过值就递归,否则就不用再算一遍了 f[a][b][c] = dfs(a, b, c - 1) + dfs(a, b - 1, c - 1) - dfs(a, b-1, c); }//注意加花括号 else if (f[a][b][c]==-1)//同理,如果上面条件均不满足,若f未赋过值就递归 f[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 f[a][b][c];//返回f的值 } int main() { long long a, b, c; memset(f, -1, sizeof(f));//初始化 while (cin >> a >> b >> c && (a != -1 || b != -1 || c != -1))//注意结束循环的条件 { cout << "w(" << a << ", " << b << ", " << c << ") = " << dfs(a, b, c) << endl;//注意空格 } //system("pause"); return 0; }
- 1
信息
- ID
- 463
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 89
- 已通过
- 33
- 上传者