Function Run Fun--POJ 1579
1、题目类型:模拟、数论。
2、解题思路:水题。
3、注意事项:dp[a][b][c]记录状态即可。
4、实现方法:
#include<iostream>
using namespace std;
int dp[21][21][21];
int w(int a,int b,int c)
{
if(a <= 0 ||b <= 0 || c <= 0)
{
return 1;
}
else if(a>20||b>20||c>20)
{
a=20,b=20,c=20;
if(dp[a][b][c])
return dp[a][b][c];
return dp[a][b][c]=w(a,b,c);
}
else if( a < b && b < c)
{
if(dp[a][b][c])
return dp[a][b][c];
else
return dp[a][b][c]=w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c);
}
else
{
if(dp[a][b][c])
return dp[a][b][c];
else
return dp[a][b][c]=w(a-1,b,c) + w(a-1,b-1,c) + w(a-1,b,c-1) - w(a-1,b-1, c-1);
}
}
int main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
if(a==-1&&b==-1&&c==-1)
break;
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;;
}
return 0;
}