请求帮忙

P1464 Function

gyttnnd @ 2022-11-14 19:43:37


#include<bits/stdc++.h>
using namespace std;
long long int x[109][109][109];
long long int f(long long int a,long long int b,long long int c)
{
    if(a<=0||b<=0||c<=0)
    return 1;
    else if(x[a][b][c]!=0)
    return x[a][b][c];
    else if(a>20||b>20||c>20)
    x[a][b][c]=f(20,20,20);
    else if(a<b&&b<c)
    x[a][b][c]=f(a,b,c-1)+f(a,b-1,c-1)+f(a,b-1,c);
    else
    x[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1);
    return x[a][b][c];
}
int main()
{
    long long int a,b,c;
    while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
    {
        memset(x,0,sizeof(x));
        cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
        if(a>20)
        a=21;
        if(b>20)
        b=21;
        if(c>20)
        c=21;
        cout<<f(a,b,c)<<endl;
    }
    return 0;
}

by xiaoshumiao @ 2023-06-21 18:47:36

long long int a,b,c;
    while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
    {
        memset(x,0,sizeof(x));
        cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
        if(a>20)
        a=21;
        if(b>20)
        b=21;
        if(c>20)
        c=21;
        cout<<f(a,b,c)<<endl;
    }

这里有改进的空间。因为你不需要每次都初始化x数组。上一次记录下来的数据这一次也能用。另外,什么是long long int?写long long比较合适。

long long a,b,c;
memset(x,0,sizeof(x));
    while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
    {
        cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
        if(a>20)
        a=21;
        if(b>20)
        b=21;
        if(c>20)
        c=21;
        cout<<f(a,b,c)<<endl;
    }  

|