0-1背包问题的非递归解
2008-10-18 18:45
85 查看
0-1背包问题:求:从1,2,3,。。。n中取若干个数,使和为m,输出所有序列的非递归算法,其中,m>n
void print(vector<int> &v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout<<*it<<" "; } cout<<endl; } void algorithm(int m,int n){ vector<int> p;//记录Path int i=n; int j=n; int temp_m=m; p.reserve(10); while(i*(1+i)/2>=m){ p.clear(); j=i; temp_m=m; while(true){ if(j==0) break; if(temp_m-j>0){ p.push_back(j); temp_m-=j; j--; }else if(temp_m-j<0){ j--; }else{ p.push_back(j); print(p); if(p.size()>0&&p[p.size()-1]!=1){ p.pop_back(); j--; continue; }else{ break; } } } i--; } } int main(){ algorithm(10,7); }