1. 程式人生 > >洛谷P1057傳球遊戲

洛谷P1057傳球遊戲

題目大意: nn個人圍成圈傳球,球只能左右傳,求傳的球經過mm次回到第一個人手中的所有情況

輸入輸出樣例 輸入

3 3

輸出

2

思路: 動態規劃,因為球傳到第ii個人只有從ii的左邊或者右邊傳,假設球經過kk次傳到了第ii個人手中,那個最普通的情況應該有f[i][k]=f[i1][k1]+f[i+1][k1]f[i][k]=f[i-1][k-1]+f[i+1][k-1]。考慮到nn個人成環,需對第nn11個人特殊考慮: f[1][k]=f[n][k1]+f[2][k1]f[1][k]=f[n][k-1]+f[2][k-1]

f[n][k]=f[1][k1]+f[n1][k1]f[n][k]=f[1][k-1]+f[n-1][k-1]

同時還需注意邊界條件f[1][0]=1f[1][0]=1,為了保證f[2][1]=1f[2][1]=1成立

#include<iostream>
#include<cstdio>
#include<cstring> 
using namespace std; 
# define N 40
int f[N]
[40]; int main(int argc, char** argv) { int n,m; scanf("%d%d",&n,&m); //f[i][k]=f[i-1][k-1]+f[i+1][k-1] f[1][0]=1;//邊界條件 for(int k=1;k<=m;k++){ //特殊情況 f[1][k]=f[2][k-1]+f[n][k-1]; for(int i=2;i<=n-1;i++) f[i][k]=f[i-1][k-1]+f[i+1][k-1]; f[n][k]=f[1][k-1]+f[n-1][k-1]; } printf
("%d\n",f[1][m]); return 0; }