hdoj1331_Function Run Fun(dp)

来源:互联网 发布:淘宝卖家收入在哪里看 编辑:程序博客网 时间:2024/06/05 16:30

思路:记忆dp

#include<iostream>#include<string.h>using namespace std;int w[100][100][100];int solve(int a, int b, int c){    if (a <= 0 || b <= 0 || c <= 0)        return 1;    if (a > 20 || b > 20 || c > 20)    {        if (w[20][20][20] == -1)            w[20][20][20] = solve(20, 20, 20);        return w[20][20][20];    }    if (w[a][b][c] != -1)        return w[a][b][c];    if (a < b&&b < c)    {            if (w[a][b - 1][c - 1] == -1)                w[a][b - 1][c - 1] = solve(a, b - 1, c - 1);            if (w[a][b - 1][c] == -1)                w[a][b - 1][c] = solve(a, b - 1, c);            if (w[a][b][c - 1] == -1)                w[a][b][c - 1] = solve(a, b, c - 1);            w[a][b][c] = w[a][b][c - 1] + w[a][b - 1][c - 1] - w[a][b - 1][c - 1];          }    else    {        if (w[a - 1][b - 1][c - 1] == -1)            w[a - 1][b - 1][c - 1] = solve(a - 1, b - 1, c - 1);        if (w[a - 1][b][c] == -1)            w[a - 1][b][c] = solve(a - 1, b, c);        if (w[a - 1][b - 1][c] == -1)            w[a - 1][b - 1][c] = solve(a - 1, b - 1, c);        if (w[a - 1][b][c - 1] == -1)            w[a - 1][b][c - 1] = solve(a - 1, b, c - 1);        w[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 w[a][b][c];}int main(){    int a, b, c;    memset(w, -1, sizeof(w));    while (cin >> a >> b >> c)    {        if (a == -1 && b == -1 && c == -1)            break;        cout << "w("<<a<<", "<<b<<", "<<c<<") = "<<solve(a, b, c) << endl;    }    return 0;}
0 0