洛谷 P1464 Function

可以当成一个记忆化的入门例题吧,虽然不太想搜索。

 

#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int memry[25][25][25];
bool vis[25][25][25];
int mw(long long a,long long b,long long c)
{
    if(a<=0 or b<=0 or c<=0) return 1;
    if(a>20 or b>20 or c>20) return mw(20,20,20);   
    if(vis[a][b][c]) return memry[a][b][c];//记忆化,如果搜过则返回记录值 
    
     vis[a][b][c]=1;    
    if(a<b and b<c)
        memry[a][b][c]=mw(a,b,c-1)+mw(a,b-1,c-1)-mw(a,b-1,c);
    else
        memry[a][b][c]=mw(a-1,b,c)+mw(a-1,b-1,c)+mw(a-1,b,c-1)-mw(a-1,b-1,c-1);    
    return memry[a][b][c];
}
int main()
{
    long long a,b,c;   
    scanf("%lld %lld %lld",&a,&b,&c);//先输入一个 
    while(a!=-1 or b!=-1 or c!=-1)
    {
        printf("w(%lld, %lld, %lld) = %d\n",a,b,c,mw(a,b,c));
        scanf("%lld %lld %lld",&a,&b,&c);
    }
    return 0;
}

 

posted @ 2023-07-25 14:55  浪矢-CL  阅读(8)  评论(0编辑  收藏  举报