⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 背包问题(非递归).cpp

📁 背包问题的非递归解法
💻 CPP
字号:
// 背包问题(非递归).cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
//本程序是用来求多个解的,采用的就是简单的穷举方法。
int n=0;
void choose(int a,int *b){    //将a转换成二进制表示
	for (int i=0;i<=n-1;i++){
		b[i]=a-(a/2)*2;
	    a=(a-b[i])/2;
	}
};
void main(){
	int can_or_not=0;
	double s;
    cout<<"请输入背包的载重量:"<<endl;
    cin>>s;
	cout<<"请输入物品的个数:"<<endl;
	cin>>n;
    double W[100][2];
    int could_take[100];
    cout<<"请依次输入各物品的重量:"<<endl;
   // cin>>W[0][1];
   // W[0][0]=0;
    for (int i=0;i<=n-1;i++){
	    cin>>W[i][1];
        W[i][0]=0;
	}
    int square=1;
    for (i=1;i<=n;i++) square=square*2;
    
    for (i=0;i<=square-1;i++){
		choose(i,could_take);
        int ans=0;
        for (int j=0;j<=n-1;j++)   ans=ans+W[j][could_take[j]];
        if (ans==s){
			can_or_not=1;
	        cout<<"可以携带的物品重量为:"<<endl;
	        for (int p=0;p<=n-1;p++)
            if(W[p][could_take[p]]!=0) cout<<W[p][could_take[p]]<<endl;
		};
	}
    if (can_or_not==0) cout<<"没有符合条件的解!"<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -