2011-12-16 23:24:42
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2077
题意:中文。
mark:递推。dp[i][0]表示i个盘子从两边杆移到两边杆的次数,dp[i][1]表示i个盘子从两边杆移到中间杆的次数。
有dp[i][0] = 3*dp[i-1][0] + 2,dp[i][1] = dp[i-1][0]+dp[i-1][1]+1。然后答案应该是dp[n-1][1]*2+2。
数据大约是3^20,没超过int。
代码:
# include <stdio.h>
int dp[25][2] = {0, 0, 2, 1} ;
int main ()
{
int i, n ;
scanf ("%d", &n) ;
for (i = 2 ; i <= 20 ; i++)
{
dp[i][0] = 3*dp[i-1][0]+2 ;
dp[i][1] = dp[i-1][0]+dp[i-1][1]+1 ;
}
while (~scanf ("%d", &n))
{
printf ("%d\n", dp[n-1][1]*2+2) ;
}
return 0 ;
}