洛谷 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;
}