警示后人

P1464 Function

fftt52536 @ 2024-11-17 09:06:24

(RE专属)

a,b,c只要任何一个是负值,记忆化就会出错。

我错的是:w(-1,7,18)

所以记忆化之前请先把负值排除。


by xkwdstj @ 2024-11-17 13:54:36

那这个呢?新手一个。全wa。。。

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


by _Milkchoco_ @ 2024-11-17 14:56:31

@xkwdstj

cout<<"w(";
cout<<a<<", "<<b<<", "<<c;
cout<<") = ";

输出要空格


by molakeser @ 2024-11-17 16:28:48

第一种情况不是说了吗?


by xkwdstj @ 2024-12-22 18:53:49

@Milkchoco 谢谢


|