soj1763.传球游戏

题目不算很难,dp的转移方程也很容易列出:

设dp[i][j] 代表第i次传球之后球回到j手中的传球数。易得:

dp[i][j] = dp[i-1][j-1] + dp[i-1][j-1] 再处理一下头头尾尾即可。

 1 #include <iostream>
 2 #include <memory.h>
 3 using namespace std;
 4 int dp[32][32];
 5 int main()
 6 {
 7     int n,m;
 8     while(cin >> n >> m)
 9     {
10         memset(dp,0,sizeof(dp));
11         int i,j;
12         dp[1][n] = 1;
13         dp[1][2] = 1;
14         for(i = 2;i <= m;i++)
15         {
16             for(j = 1;j <= n;j++)
17             {
18                 if(j == 1)
19                     dp[i][j] = dp[i-1][j+1] + dp[i-1][n];
20                 else if(j == n)
21                     dp[i][j] = dp[i-1][j - 1] + dp[i-1][1];
22                 else
23                     dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1];
24             }
25         }
26         cout << dp[m][1] << endl;
27     }
28     return 0;
29 }

 

posted @ 2013-08-18 16:56  中大黑熊  阅读(314)  评论(0编辑  收藏  举报