gyttnnd @ 2022-11-14 19:43:37
#include<bits/stdc++.h>
using namespace std;
long long int x[109][109][109];
long long int f(long long int a,long long int b,long long int c)
{
if(a<=0||b<=0||c<=0)
return 1;
else if(x[a][b][c]!=0)
return x[a][b][c];
else if(a>20||b>20||c>20)
x[a][b][c]=f(20,20,20);
else if(a<b&&b<c)
x[a][b][c]=f(a,b,c-1)+f(a,b-1,c-1)+f(a,b-1,c);
else
x[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1);
return x[a][b][c];
}
int main()
{
long long int a,b,c;
while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
{
memset(x,0,sizeof(x));
cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
if(a>20)
a=21;
if(b>20)
b=21;
if(c>20)
c=21;
cout<<f(a,b,c)<<endl;
}
return 0;
}
by xiaoshumiao @ 2023-06-21 18:47:36
long long int a,b,c;
while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
{
memset(x,0,sizeof(x));
cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
if(a>20)
a=21;
if(b>20)
b=21;
if(c>20)
c=21;
cout<<f(a,b,c)<<endl;
}
这里有改进的空间。因为你不需要每次都初始化x数组。上一次记录下来的数据这一次也能用。另外,什么是long long int?写long long比较合适。
long long a,b,c;
memset(x,0,sizeof(x));
while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1)
{
cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";
if(a>20)
a=21;
if(b>20)
b=21;
if(c>20)
c=21;
cout<<f(a,b,c)<<endl;
}