Function Run Fun--POJ 1579

11365 ワード

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