**筆試題:
有n個蛋和m個籃子,把蛋放到m個籃子裡,每個籃子都不能為空。另外,需要滿足:任意乙個小於n的正整數,都能由某幾個籃子內蛋的數量相加的和得到。寫出程式,使得輸入乙個(n,m),輸出所有可能的分配情況
#include "stdafx.h"#include #include using namespace std;
#define max 1000
int ans[max];
int count = 0;
int cal = 0;
//如果前x的籃子已經放了y個雞蛋,則第x+1個籃子可以放1到y+1個雞蛋,(如果放y+2,則取不出y+1)
//第x+2個籃子可以放(y+y+1)+1=2y+2
//第x+3個籃子可以放(2y+2+y+1+y)+1=4y+4,這樣我們可以從0開始 ,依次開始遍歷所有存放情況
void dfs(int hasegg,int nextbasketindex,int totalegg,int totalbasket,int last)
printf("\n");
count++;
return ;
} if(nextbasketindex>=totalbasket||hasegg>=totalegg)
//剪枝1:如果後面的所有籃子都用最小數來填充 都比總數大
if(hasegg+last*(totalbasket-nextbasketindex)>totalegg)return;
//剪枝2:如果後面的所有籃子都用最大數來填充 還是不夠大
if((hasegg+1)*(pow(2,totalbasket-nextbasketindex)-1)+haseggreturn;
for(int i=last;i<=hasegg+1;i++)
}int solve(int egg,int basket)
void main()
m個蘋果放入n個盤子
放蘋果問題 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子的放法數目,則先對n作討論,當n m 必定有n m個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響。即if n m ...
m個蘋果放入n個盤子問題
題目 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。0 n 10 m 10 解題思路 我們首先定義dp i j 表示i個蘋果,j個盤子的分法總數 1.當盤...
m個蘋果放入n個盤子問題
這個問題,看似是乙個簡單的排列組合問題,但是加上不同的限制條件,會演變成不同的問題,感覺很奇妙,就總結一下列舉下來 問題一 問題描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子...