简单栈实现背包问题

这篇文章我知道很渣,写出来只是做个记号,下次再去完善。

/*
栈实现简单背包问题
*/

 

#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;
}



  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值