背包一

数据结构书上的背包问题,最基本的背包问题。

简单回溯,数字模拟栈。

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int totalweight;
	cin>>totalweight;
	int num;
	cin>>num;
	int weis[100];
	for(int i = 0; i < num; i++)
	{
		cin>>weis[i];
	}
	// 
	int stack[100];
	int top = -1;
	
	int leftwei = totalweight;
	int trying = 0;
	while(top != -1 || trying != num)
	{
		while( leftwei - weis[trying] >= 0 && trying < num)
		{
			top++;
			stack[top] = trying;
			leftwei -= weis[trying];
			trying++;
		}
		if(leftwei == 0)
		{
			for(int i = 0; i < top + 1; i++)
			{
				cout<<stack[i]<<"  "; 
			}
			cout<<endl;
			leftwei = weis[stack[top]];
			trying = stack[top] + 1;
			top--;
		}
		else if( trying >= num)
		{
			leftwei += weis[stack[top]];
			trying = stack[top] + 1;
			top--;
		}
		else
			trying++;
	}
	return 0;
}

  

转载于:https://www.cnblogs.com/coralyms/p/4366876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值