这道题卡住了,求大家帮忙看看,或者提供下思路
有一天,Lolita上街买菜,在她要买鸡蛋的时候,忽然盯着几个篮子发呆。
她在想,如果把手中的鸡蛋都放到这几个篮子里,有多少种放法呢?
她想了很久,但想不出来应该怎么算,你们能帮帮她吗?
输入:
多组数据,每一组是一行,一行有两个数e,b,e是鸡蛋数目(1<=e<=1000),b是篮子数目(1<=b<=100)。
输出:
对每一组数据算出总放法数目并输出,要单独占一行。题目数据保证最后计算结果小于1e19
样例输入:
8 1
8 2
6 3
7 3
样例输出:
1
5
7
8
提示:
6 3的话,可以是
0+0+6
0+1+5
0+2+4
0+3+3
1+1+4
1+2+3
2+2+2
共7种方法
#include <iostream>#include <set>int count = 0;using namespace std;void putegg(int egg, int basket);void main(){ int basket; int egg; cin >> egg; cin >> basket; putegg(egg, basket); cout << count << endl; }void putegg(int egg, int basket){ if (egg < 0 || basket < 0) { return; } else if (egg == 0 && basket == 0) { ++count; return; } else { for (int i = 0; i <= egg; ++i)//用递归遍历所有出现的可能 { //set<int> rec; int tegg = egg - i; int tbasket = basket - 1; //rec.insert(tegg); putegg(tegg, tbasket); } }}for (int i = egg>limit?limit:egg; i*basket >= egg; --i)
[解决办法]
在网上搜索动态规划,DP之类的,能看到很多资料。动态规划稍微的学学很容易,应用也很简单。用来计算各种组合爆炸的问题超级强大。
超出数据范围了就只有用自己写的大数方式了,到博客区一搜一大堆。