全部MLE,关于记忆化的一些提问
  • 板块P1464 Function
  • 楼主Rainsleep
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/6/23 21:59
  • 上次更新2023/10/27 22:44:08
查看原帖
全部MLE,关于记忆化的一些提问
666796
Rainsleep楼主2022/6/23 21:59
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll x,y,z;

ll memory[30][30][30];

ll res;

ll f(ll x,ll y,ll z)
{
    if(memory[x][y][z])
        return memory[x][y][z];
    else
    {
        if(x<=0 or y<=0 or z<=0)
            return memory[x][y][z]=1;
        else if(x>20 or y>20 or z>20)
                return memory[20][20][20]=memory[x][y][z]=f(x,y,z);
        else if(x<y and y<z)
            return memory[x][y][z]=f(x,y,z-1)+f(x,y-1,z-1)+f(x,y-1,z);
        else
            return memory[x][y][z]=f(x-1,y,z)+f(x-1,y-1,z)+f(x-1,y,z-1)-f(x-1,y-1,z-1);
    }
}

signed main()
{
    
    while(~scanf("%lld %lld %lld",&x,&y,&z) and (x!=-1 and y!=-1 and z!=-1))
    {
        memset(memory,0,sizeof memory);
        
        printf("w(%lld, %lld, %lld) = ",x,y,z);
        
        if(x>20)
            x=21;
        if(y>20)
            y=21;
        if(z>20)
            z=21;
        
        res=f(x,y,z);
        
        printf("%lld",res);
        
        puts("");
        
    }
    
    
    
    return 0;
}

代码如上,这是改完一些小错的版本,但是依旧没有找出来为什么MLE,是因为递归陷入死循环了吗?

2022/6/23 21:59
加载中...