这篇文章我知道很渣,写出来只是做个记号,下次再去完善。
/*
栈实现简单背包问题
*/
#include<iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
using namespace std;
int main(){
int sum,k,i = 0;
stack<int> s;
scanf("%d",&sum); //容量
int a[] = {4,3,6,2,5,1};
k = sizeof(a)/sizeof(a[0]);
int jilu[20]; // 设置这数组的目的是记住压入栈中原数组的下标,方便以后记录容器的剩余量
int item = 0;
while(!s.empty()||i!=k){
while(i<k&&sum>0){
if(sum-a[i]>=0){
jilu[item++] = i;
s.push(a[i]);
sum-=a[i];
}
i++;
}
if(!sum){
while(!s.empty()){
printf("%d ",s.top());
s.pop();
}
}
else{
s.pop(); i = jilu[item-1]; sum+=a[i]; item--;
}
i++;
}
return 0;
}