[恢]hdu 2077

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



posted @ 2012-01-06 17:43  Seraph2012  阅读(193)  评论(0编辑  收藏  举报