YTU 2335: 0-1背包问题
2335: 0-1背包问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 15 解决: 12
题目描述
试设计一个用回溯法搜索子集空间树的函数。该函数的参数包括结点可行性判定函数和上界函数等必要的函数,并将此函数用于解0-1背包问题。 0-1 背包问题描述如下:给定n 种物品和一个背包。物品i 的重量是wi ,其价值为vi ,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有2 种选择,即装入背包或不装入背包。不能将物品i 装入背包多次,也不能只装入部分的物品i。
输入
第一行有2个正整数n和c。n是物品数,c是背包的容量。接下来的1 行中有n个正整数,表示物品的价值。第3 行中有n个正整数,表示物品的重量。
输出
将计算出的装入背包物品的最大价值和最优装入方案输出。第一行输出为:Optimal value is
样例输入
5 10
6 3 5 4 6
2 2 6 5 4
样例输出
Optimal value is
15
1 1 0 0 1
迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……
#include<iostream>
#include<stdio.h>
using namespace std;
int ab,c,n,ji[200],h[200];
struct bag
{
int w;
int h;
} b[200];
void digui(int d,int s,int sc) //d为第几个物品,为当前价值,sc为当前所占质量
{
if(sc>c)return; //如果当前质量大于容量返回
if(d==n) //如果所有物品检验完毕
{
if(ab<s) //当前价值小于最大价值
{
ab=s;
for(int i=0; i<d; i++) //记录此时物品放置信息
h[i]=ji[i];
}
}
else for(int i=0; i<2; i++)
{
if(i==0)ji[d]=0,digui(d+1,s,sc); //不放入当前物品
else ji[d]=1,digui(d+1,s+b[d].w,sc+b[d].h); //放入当前物品
}
}
int main()
{
cin>>n>>c;
for(int i=0; i<n; i++)
cin>>b[i].w; //输入价值
for(int i=0; i<n; i++)
cin>>b[i].h; //输入重量
digui(0,0,0); //递归函数
printf("Optimal value is\n%d\n",ab);
for(int i=0; i<n; i++)
printf(i!=n-1?"%d ":"%d\n",h[i]);
return 0;
}
#include<stdio.h>
using namespace std;
int ab,c,n,ji[200],h[200];
struct bag
{
int w;
int h;
} b[200];
void digui(int d,int s,int sc) //d为第几个物品,为当前价值,sc为当前所占质量
{
if(sc>c)return; //如果当前质量大于容量返回
if(d==n) //如果所有物品检验完毕
{
if(ab<s) //当前价值小于最大价值
{
ab=s;
for(int i=0; i<d; i++) //记录此时物品放置信息
h[i]=ji[i];
}
}
else for(int i=0; i<2; i++)
{
if(i==0)ji[d]=0,digui(d+1,s,sc); //不放入当前物品
else ji[d]=1,digui(d+1,s+b[d].w,sc+b[d].h); //放入当前物品
}
}
int main()
{
cin>>n>>c;
for(int i=0; i<n; i++)
cin>>b[i].w; //输入价值
for(int i=0; i<n; i++)
cin>>b[i].h; //输入重量
digui(0,0,0); //递归函数
printf("Optimal value is\n%d\n",ab);
for(int i=0; i<n; i++)
printf(i!=n-1?"%d ":"%d\n",h[i]);
return 0;
}
YTU 2335: 0-1背包问题的更多相关文章
- 蓝桥杯 0/1背包问题 (java)
今天第一次接触了0/1背包问题,总结一下,方便以后修改.不对的地方还请大家不啬赐教! 上一个蓝桥杯的例题: 数据规模和约定 代码: import java.util.Scanner; public ...
- 经典递归问题:0,1背包问题 kmp 用遗传算法来解背包问题,hash表,位图法搜索,最长公共子序列
0,1背包问题:我写笔记风格就是想到哪里写哪里,有很多是旧的也没删除,代码内部可能有很多重复的东西,但是保证能运行出最后效果 '''学点高大上的遗传算法''' '''首先是Np问题的定义: npc:多 ...
- Java实现动态规划法求解0/1背包问题
摘要: 使用动态规划法求解0/1背包问题. 难度: 初级 0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进 ...
- 0/1背包问题(DP)
Description 给定 n 个物品和一个背包.物品 i 的重量是 wi ,其价值为 vi ,背包的容量为 C .问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? Input 输入 ...
- hdu2602Bone Collector ——动态规划(0/1背包问题)
Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...
- 【Python】0/1背包、动态规划
0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同的几件物品,怎样放能让背包中物品的价值最大? 比如,有三件物品重量w,价值v分别是 w=[5,3,2] v=[9,7,8] 包的容量是5 ...
- 使用LINGO来解决0/1背包算法问题
1.问题说明 0/1背包问题:我们有n种物品,物品j的重量为wj,价格为pj.我们假定所有物品的重量和价格都是非负的.背包所能承受的最大重量为W.如果限定每种物品只能选择0个或1个,则问题称为0-1背 ...
- HDU 2602 Bone Collector 0/1背包
题目链接:pid=2602">HDU 2602 Bone Collector Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...
- 动态规划-背包问题 Knapsack
2018-03-15 13:11:12 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何 ...
随机推荐
- 阿里与腾讯“智慧城市”的O2O谁更强?(分享)
成都亿合科技:本月22日蚂蚁金服联合新浪微博宣布“智慧城市”战略,用户可通过新浪微博.手机淘宝.支付宝三大客户端完成医疗.市政缴费以及相关信息查询工作,首批入驻城市有上海.太原.深圳.青岛等12个城市 ...
- Linux: .vimrc
set nuset autoindentset cindent"set tabstop=2"set shiftwidth=2set cursorlineset hlsearch&q ...
- 关于非阻塞connect的若干细节性问题
我们用man connection命令查看手册,如下: EINPROGRESS The socket is nonblocking and the connection cannot be com ...
- CCF真题之节日
201503-3 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ y ...
- System.Web.HttpContext.Current.Server.MapPath("~/upload/SH") 未将对象引用设置为实例对象
做项目的时候,System.Web.HttpContext.Current.Server.MapPath("~/upload/SH") 获取路径本来这个方法用的好好的 因为需要 ...
- AP模块的发票过账后关联对应的凭证编号。
--AP发票 SELECT GJH.NAME,GJH.LEDGER_ID,GJH.JE_CATEGORY, GJH.JE_SOURCE,XDL.SOURCE_DISTRIBUTION_TYPE, XT ...
- ThinkPHP讲解(七)——修改删除
修改数据 方式一:数组方式,直接将数据库里需要修改的内容进行修改 function Update() { //1.数组方式 $model=D("Info"); $attr=arra ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON DivImage1
zw版[转发·台湾nvp系列Delphi例程]HALCON DivImage1 procedure TForm1.Button1Click(Sender: TObject);var img0, ...
- yii2自动生成表单
视图中: 1.要use的两个文件类 use yii\helpers\Html; use yii\widgets\ActiveForm; 2.生成表单,以添加商品为例说明.注意红线区域:上传文件需要 ...
- javascript 正则表达式(二)
/* 正则表达式方法:test(),exec(),String对象方法:match(),search(),replace(),split() 1.test()方法: 用法: regexp对象实例.t ...