1. 程式人生 > >NOIp2008傳球遊戲(普及組T3)————動態規劃

NOIp2008傳球遊戲(普及組T3)————動態規劃

題解:本題主要考查動態規劃。因為球只能左右傳,所以i同學只能來自於的左邊一個同學(i-1)和右邊一個同學(i+1)。傳j次球的方案數就是j-1次傳到左邊和右邊的方案數之和。
f[i][k]=f[i-1][k-1]+f[i+1][k-1],(i=1或n時,需單獨處理)。
程式碼如下:

#include<iostream>
using namespace std;
int n,m,i=1,j;
int d[31][31];
int main()
{
    d[1][0]=1;
    cin>>n>>m;
    for(j=1;j<=m;j++)
    {
        if(i==1)d[i][j]=d[2][j-1]+d[n][j-1];
        for(i=2;i<=n-1;i++)
        d[i][j]=d[i-1][j-1]+d[i+1][j-1];
        if(i==n)d[n][j]=d[1][j-1]+d[n-1][j-1];
        i=1; 
    }
    cout<<d[1][m];
    return 0;
}