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

📄 my0-1knapsack.cpp

📁 给定n 个物品, 物品i重为wi 并且价值为 vi
💻 CPP
字号:
#include<iostream>
using namespace std;
int main(){
    int n,c,w[101],p[101],v[101][2000],i,j,total=0,result[101];
	cout<<"****************  0-1 背包问题程序实例 **********************"<<endl;
	cout<<endl<<"请输入背包的容量C (C为0则程序结束):";
	cin>>c;
	if (c==0) goto over;
	cout<<endl<<"请输入可供选择的物品的个数N (N为0则程序结束):";
	cin>>n;
	while (n && c){
         cout<<endl<<"请输入"<<n<<"个物品的重量W和价值P:";
		 for(i=1;i<=n;i++){
			 cout<<endl<<"物品"<<i<<"---重量:";
			 cin>>w[i];
			 cout<<"        价值: ";
			 cin>>p[i];
		 }

		 for(i=1;i<=n;i++)
			 v[i][0]=0;
		 for(j=0 ;j<=c;j++)
			 v[0][j]=0;
		 for(i=1;i<=n;i++)
		    for(j=1;j<=c;j++){
				v[i][j]=v[i-1][j];
				if ((w[i]<=j) && (v[i][j]<v[i-1][j-w[i]]+p[i])) {                 
					   v[i][j]=v[i-1][j-w[i]]+p[i]; 
                       if(j==c)  result[++total]=i;
				}
			}
        cout<<"装满背包可获得的最大价值为:"<<v[n][c]<<endl;
		cout<<"装入背包的物品为:"<<endl<<"物品:";
		for(i=1;i<=total;i++)
			cout<<result[i]<<", ";
	
		total=0;
        cout<<endl<<endl<<"请输入背包的容量C (C为0则程序结束):";
	    cin>>c;
        if (c==0) goto over;
        cout<<endl<<"请输入可供选择的物品的个数N (N不大于100,若为0则程序结束):";
	    cin>>n;
	}
over:;	cout<<endl<<"***********   谢谢使用!    ***********"<<endl;
	return 1;
}

⌨️ 快捷键说明

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