一个疑问

P1464 Function

fyvdnz @ 2023-04-06 17:31:40

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

long long n,m;
long long p[25][25][25]={0};

long long t(long long a,long long b,long long c){
    cout << "w(" << a << ", " << b << ", " << c << ") = ";
}
long long prin(){
    cout  << n << endl;
}

long long w(long long a,long long b,long long c){
    if(a<=0||b<=0||c<=0)
        p[a][b][c]=1;
    else if(p[a][b][c]!=0) 
        return p[a][b][c];
    else if(a>20||b>20||c>20)
        p[a][b][c]=w(20,20,20);
    else if(a<b&&b<c)
        p[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
    else 
        p[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 p[a][b][c];
}

int main(){
    long long x,y,z;
    while(scanf("%lld%lld%lld",&x,&y,&z)==3){
        if(x==(-1)&&y==(-1)&&z==(-1))
            break;
        t(x,y,z);
        if(x>20)x=21;
        if(y>20)y=21;
        if(z>20)z=21;
        if(x<-1) x=-1;
        if(y<-1) y=-1;
        if(z<-1) z=-1;
        n=w(x,y,z);
        prin();
    }
    return 0;
}

在遇到(-1 x x) 这种以-1开头的会运行错误,将if(a<=0||b<=0||c<=0) p[a][b][c]=1; 改为 将if(a<=0||b<=0||c<=0) return 1; 就可以正常执行,但是我不理解是为什么。


by ud2_ @ 2023-04-06 17:57:37

负数不是合法下标。


by fyvdnz @ 2023-04-07 08:26:51

@ud2_ 哦哦,实属做题做懵了,谢谢。


|