类似于0-1背包问题
回溯法+剪枝
// MicroSTest4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
using 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的专栏