poj1664

题意:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

分析:dp,我们认为每个盘子所放的苹果数组成的数列是降序的,讨论最后一个盘子放不放苹果,若放则前面每个盘子都放,方法数相当于把每盘方一个之后剩下的m-n个苹果往n个盘子里放,若不放则相当于把m个苹果放入n-1个盘子。

View Code
#include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
usingnamespace std;

#define maxn 11

int f[maxn][maxn];

int main()
{
//freopen("t.txt", "r", stdin);
for (int i =0; i < maxn; i++)
f[i][
0] =1;
for (int i =0; i < maxn; i++)
f[
0][i] =0;
for (int i =1; i < maxn; i++)
for (int j =1; j < maxn; j++)
if (j >= i)
f[i][j]
= f[i][j - i] + f[i -1][j];
else
f[i][j]
= f[j][j];
int t;
int m, n;
scanf(
"%d", &t);
while (t--)
{
scanf(
"%d%d", &m, &n);
printf(
"%d\n", f[n][m]);
}
return0;
}
posted @ 2011-06-16 18:02  金海峰  阅读(436)  评论(0编辑  收藏  举报