C++_揹包最大可容價值問題
阿新 • • 發佈:2018-12-13
#include <iostream> #define N 14 using namespace std; int main() { int i, w[N], s[N],vm[N], C, top, j, vi[N], V=0, Vmax=0, vitop; cout<<"請輸入揹包容量"<<endl; cin>>C; cout<<"請輸入13件物品體積及其價值"<<endl; for(i=0;i<N-1;i++) { cout<<"第"<<i+1<<"件物品的體積為 "; cin>>w[i]; cout<<"價值為 "; cin>>vi[i]; cout<<endl; } w[6]=0; vi[6]=0; top=0; i=0; while(C>=0&&i<N) { if(C-w[i]>=0&&i<N-1) { top++; s[top]=i; C=C-w[i]; V=V+vi[i]; } if(V>Vmax) { Vmax=V; vitop=top; for(j=1;j<=top;j++) vm[j]=s[j]; } else { if(i==N-1&&top>0) { i=s[top]; top--; C=C+w[i]; V=V-vi[i]; } } i++; } cout<<"揹包所能容納最大物品價值為 "<<Vmax<<endl<<"其中包含"<<endl; for(i=1;i<=vitop;i++) { j=vm[i]; cout<<"體積為 "<<w[j]<<" 價值為 "<<vi[j]<<" 的第 "<<j+1<<" 件物品 "<<endl; } system("pause"); return 0; }