现在的位置: 首页 > 综合 > 正文

hrbeu 放苹果 pku 1664 动态规划

2012年08月31日 ⁄ 综合 ⁄ 共 643字 ⁄ 字号 评论关闭

很典型的动态规划题

很好的算法
f(m, n) = f(m-n, n) + f(m, n-1)

f(m, n): 把m个苹果放到n个盘子中的方法数
f(m, n-1): 把m个苹果放到n-1个盘子中的方法数(其中至少有一个空盘子)
f(m-n, n): 把m个苹果放到n个盘子中,而且每个盘子中都有苹果(先拿n个出来,等m-n个放好了,然后每个盘子放一个)

 

/*
* hrbeuapple.c
*
* Created on: 2011-10-10
* Author: bjfuwangzhu
*/

#include<stdio.h>
#define nmax 11
int num[nmax][nmax];
void init() {
int i, j;
for (i = 0; i < nmax; i++) {
num[i][0] = 0, num[0][i] = 0;
}
for (i = 1; i < nmax; i++) {
for (j = 1; j < nmax; j++) {
if (i < j) {
num[i][j] = num[i][i];
} else if (i == j) {
num[i][j] = num[i][j - 1] + 1;
} else {
num[i][j] = num[i][j - 1] + num[i - j][j];
}
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
int t, n, k;
init();
scanf("%d", &t);
while (t--) {
scanf("%d %d", &n, &k);
printf("%d\n", num[n][k]);
}
return 0;
}

抱歉!评论已关闭.