完全背包问题 打印背包中的物品
2015-11-11 14:39
274 查看
与0/1背包问题不同的是,每个物品可以任意次放,只要小于总容量就行,这里打印装进去的物品,还打印每种物品装了多少次
代码如下:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(int argc, char** argv)
{
cout<<"完全背包问题"<<endl<<endl<<"输入背包总容量"<<endl;
size_t Capacity;
cin>>Capacity;
cout<<"输入物品总数目"<<endl;
size_t num;
cin>>num;
cout<<"输入物品的体积和价值"<<endl;
vector<int> vol;
vector<int> val;
int temp1,temp2;
size_t i=0,j=0;
for(i=0;i<num;++i)
{
cin>>temp1>>temp2;
vol.push_back(temp1);
val.push_back(temp2);
}
vector<int> result(Capacity+1,0);
vector<int> print(Capacity+1,-1); //输出装进去的物品
int temp;
for(i=0;i<num;++i)
{
for(j=vol[i];j<=Capacity;++j)
{
if(vol[i] <= j)
{
temp = result[j-vol[i]] + val[i];
if(temp > result[j])
{
result[j] = temp;
print[j] = i;
}
}
}
}
cout<<"最大价值为 "<<result[Capacity]<<endl;
cout<<"装进去的物品为"<<endl;
j = Capacity;
map<int,size_t> map1;
while(print[j] != -1)
{
cout<<"物品"<<print[j]+1<<" ";
map1[print[j]]++;
j -= vol[print[j]];
}
for(i=0;i<num;++i)
cout<<endl<<"物品 "<<i+1<<" 装包的数量为 "<<map1[i];
return 0;
}运行结果
代码如下:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(int argc, char** argv)
{
cout<<"完全背包问题"<<endl<<endl<<"输入背包总容量"<<endl;
size_t Capacity;
cin>>Capacity;
cout<<"输入物品总数目"<<endl;
size_t num;
cin>>num;
cout<<"输入物品的体积和价值"<<endl;
vector<int> vol;
vector<int> val;
int temp1,temp2;
size_t i=0,j=0;
for(i=0;i<num;++i)
{
cin>>temp1>>temp2;
vol.push_back(temp1);
val.push_back(temp2);
}
vector<int> result(Capacity+1,0);
vector<int> print(Capacity+1,-1); //输出装进去的物品
int temp;
for(i=0;i<num;++i)
{
for(j=vol[i];j<=Capacity;++j)
{
if(vol[i] <= j)
{
temp = result[j-vol[i]] + val[i];
if(temp > result[j])
{
result[j] = temp;
print[j] = i;
}
}
}
}
cout<<"最大价值为 "<<result[Capacity]<<endl;
cout<<"装进去的物品为"<<endl;
j = Capacity;
map<int,size_t> map1;
while(print[j] != -1)
{
cout<<"物品"<<print[j]+1<<" ";
map1[print[j]]++;
j -= vol[print[j]];
}
for(i=0;i<num;++i)
cout<<endl<<"物品 "<<i+1<<" 装包的数量为 "<<map1[i];
return 0;
}运行结果
相关文章推荐
- ExtJs4 基础必备
- zoj 2975 Kinds of Fuwas
- shell date处理
- node-readability不能正常工作
- 反向传播神经网络极简入门
- 结构体、共用体简单比较
- AWK用户自定义函数
- ASIHTTPRequest
- Activity 在本地进程的创建流程,已经动画
- 程序异常动手动脑整理
- UML图基本类型
- SharePoint Config database Log file too big – reduce it!
- Android 动画
- sublime快捷键整理
- subString() jdk1.7改进
- α_β_γ_δ_ε_ζ_η_θ_ι_κ_λ_μ_ν怎么读
- semver语义化版本号
- Block对捕捉变量的影响
- 【记录学习linux】第一天
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数