1 条题解

  • 1
    @ 2023-8-23 21:57:38
    #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
    上传者