描述:
N人为了大快朵颐,行至云餐二楼,取了N个盘子,打了M个饺子。现欲将M个饺子装入N个盘子中,试问共有多少种不同的装法?假设盘子足够大,并且盘子里可以什么都不放。注意像2 5 0和5 0 2之类的属于同一种放法。
输入:
两个整数M、N(1=< M,N <=100)以空格隔开。
输出:
单独一行输出共有几种装法。
输入样例:
7 3
输出样例:
8#include <iostream> #include <fstream> using namespace std; int FindAll(int n, int m) { int *arrange = new int[(n + 1) * (m + 1)]; int temp; ofstream out("file.txt"); memset(arrange, 0x00, sizeof(int) * (m + 1) * (n + 1)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (i > j) arrange[i * (m + 1) + j] = arrange[i * (m + 1) + j - 1] + arrange[(i - j) * (m + 1) + j]; else if (i == j) arrange[i * (m + 1) + j] = arrange[i * (m + 1) + j - 1] + 1; else arrange[i * (m + 1) + j] = arrange[i * (m + 1) + i]; out << i << ", " << j << ": " << arrange[i * (m + 1) + j] << endl; } } temp = arrange[n * (m + 1) + m]; delete []arrange; return temp; } int main(int argc, char *argv[]) { int n, m; cin >> n >> m; if (n == 0 || m == 0) cout << "0" << endl; else cout << FindAll(n, m) << endl; return 0; }
posted on 2011-06-21 22:05 ruce.fan 阅读(126) 评论(0) 编辑 收藏 举报