蒟蒻求助

P1464 Function

pengsiqi11 @ 2024-10-13 13:34:36

code:


#include<bits/stdc++.h>
using namespace std;
int p[25][25][25];
int 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 p[20][20][20];
    if(p[a][b][c]>0) return p[a][b][c];
    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);
        return p[a][b][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 d,e,f;
    while(1){
        cin>>d>>e>>f;
        if(d==-1&&e==-1&&f==-1) break;
        else cout<<"w("<<d<<", "<<e<<", "<<f<<") = "<<w(d,e,f)<<endl;} 
    return 0;}
```20pts,检查了几遍,感觉没有问题,但
这就是现实(https://www.luogu.com.cn/record/181818263)

by O_v_O @ 2024-10-13 13:51:34

咳,跟我刚学OI一样,如果你的 w(20,20,20) 之前没有跑过咋么办,你直接返回有可能里面没有值。

代码:

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

by O_v_O @ 2024-10-13 13:54:28

@pengsiqi11


by pengsiqi11 @ 2024-10-13 14:39:34

ohhhhhhhhhhhh! 想起来了想起来了想起来了 谢谢大佬!


|