程式設計求解:
輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,
使其和等於 m ,要求將其中所有的可能組合列出來.
//coder:lee
//20120315
#include
#include
#include
using namespace std;
//solution1
void combine(int beg,int end,int getn,vector&v,int m)
if(sum==m)
cout<}
return;
}for (int i=beg;i<=end;i++)
}void finddigitsequeltom(int n,int m)//遞迴解法
}//solution2
void finddigitsequeltomnorecurion(int n,int m)//類似0-1揹包問題,非遞迴解法
else if (sum+front==m)//等於m,輸出容器中的數字,pop容器,更新front
else//大於m,pop容器,更新front
front++;
while(front>n&&!index.empty())//如果front越界,容器非空,則pop容器,更新front,直到小於n}}
//solution3
int sum=0;
void backtrack(int n,int m,vector&v,int i)
else
return;}}
int main()
最少的硬幣組合出1到m之間的任意值(貪婪演算法)
首先判斷有無解,如果最小面額硬幣大於1則無解,因為搭配不出1。如果有1則有解,因為所有面額都可以由1堆積出來。接下來思考乙個問題,假設當前硬幣可以組合出1到5的任意面額,那麼新增一枚面額為6的硬幣就可以搭配出1到11的任意面額。考慮1 i 1已經構出,那麼再加一枚什麼面值的硬幣最優,顯然選一枚 su...
二叉樹 任意路徑和等於sum
給定二叉樹和乙個常數sum,求二叉樹中路徑和等於sum的所有路徑個數,這些路徑可以是任意起點和終點,但必須是按照從父節點到子節點的路徑 方法一 強遍歷,對所有節點,以該節點為起點,遍歷其所有子節點,求路徑和等於sum的個數,時間複雜度o n 2 public int pathsum treenode...
排列組合(包含所有組合可能和指定元素個數的組合)
當元素個數少時.元素組合方式 f 1 a a f 2 a,b b ba a f 3 a,b,c c cb cba ca b ba a f 4 a,b,c,d d dc dcb dcba dca db dba da c cb cba ca b ba a f n 由上表可以得出,n 個元素的所有組合方式...