快速寻找数组的子集之和为固定数

来源:互联网 发布:怎样帮淘宝刷好评挣钱 编辑:程序博客网 时间:2024/05/23 02:29

类似于0-1背包问题
回溯法+剪枝

// MicroSTest4.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#include#includeusing namespace std;vector result;void find_factor(vector & mylis , int sum , int i){ if(i<=0 || sum<=0)  return; if(mylis[i] == sum) {    for(vector::iterator iter=result.begin(); iter!=result.end();iter++)   cout<<*iter<<"+";  cout<<mylis[i]<<endl;  return; } result.push_back(mylis[i]); find_factor(mylis , sum-mylis[i] , i-1); result.pop_back(); find_factor(mylis , sum , i-1);} int _tmain(int argc, _TCHAR* argv[]){ int A[20] = {1,3,6,4,2,6,8,9,12,14,7,3,4,10,5,11,13}; vector  myvector(A,A+sizeof(A)/sizeof(int)); cout<<"数组长度是 "<<myvector.size()<<endl; //排序前 for(vector::iterator iter=myvector.begin(); iter!=myvector.end();iter++)  cout<<*iter<<"  "; cout<<endl; //对数组排序 sort(myvector.begin() , myvector.end()); /// /小到大  //排序后 for(vector::iterator iter=myvector.begin(); iter!=myvector.end();iter++)  cout<<*iter<<"  "; int sum = 15; int num = myvector.size(); find_factor(myvector , sum , num-1); system("pause"); return 0;}


 

转载地址:

wxl3105的专栏