Function Run Fun--POJ 1579
11365 ワード
1、テーマタイプ:シミュレーション、数論.
2、問題を解く構想:水問題.
3、注意事項:dp[a][b][c]状態を記録すればよい.
4、実現方法:
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
;
}