top1编程
← 返回题目
题解

【基础】递归函数

1 条题解

  • 0
    @ 2026-7-29 0:16:40
    #include<bits/stdc++.h>
    using namespace std;
    long long ans[25][25][25];
    bool p[25][25][25];
    long long cjf(long long  a,long long b,long long c){
    	if(a<=0||b<=0||c<=0) {
    		return 1;
    	}
    	if(a>20||b>20||c>20){
    		return cjf(20,20,20);
    	}
    	if(p[a][b][c]){
    		return ans[a][b][c];
    	} 
    	if(a<b&&b<c)  {
    		ans[a][b][c]=cjf(a,b,c-1)+cjf(a,b-1,c-1)-cjf(a,b-1,c);
    	}else{
    		ans[a][b][c]=cjf(a-1,b,c)+cjf(a-1,b-1,c)+cjf(a-1,b,c-1)-cjf(a-1,b-1,c-1);
    	}
    	p[a][b][c]=1;
    	return ans[a][b][c];
    }
    int main(){
    //	int n,m;
    //	cin>>n>>m;
    //	if(n==1||n==15||m==1||m==15){
    //		cout<<"black";
    //	}else if(n==2||n==14||m==2||m==14){
    //		cout<<"white";
    //	}else if(n==3||n==13||m==3||m==13)
    	long long q,w,e;
    	 memset(p,false,sizeof(p));
    	cin>>q>>w>>e;
    	cout<<cjf(q,w,e)<<endl;
    	return 0;
    }
    
    • 1