a[n][m][k]:n个座位,m个人,分成k段,,最后座位坐人的情况
b[n][m][k]:n个座位,m个人,分成k段,,最后座位不坐人的情况
状态转移方程
a[n][m][k]=a[n-1][m][k]+b[n-1][m][k-1];
b[n][m][k]=a[n-1][m-1][k-1]+b[n-1][m-1][k];
#include<stdio.h>
__int64 a[202][202][22],b[202][202][22];
int main()
{
int n,m,k,i,j,p;
a[1][0][1]=1;
b[1][1][1]=1;
for(i=2;i<=200;i++)
for(j=0;j<=200;j++)
for(p=1;p<=20&&p<=i;p++)
{
a[i][j][p]=a[i-1][j][p]+b[i-1][j][p-1];
if(j==0)continue;
b[i][j][p]=a[i-1][j-1][p-1]+b[i-1][j-1][p];
}
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
printf("%I64d\n",a[n][m][k]+b[n][m][k]);
}
return 0;
}