博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01背包问题
阅读量:5080 次
发布时间:2019-06-12

本文共 1415 字,大约阅读时间需要 4 分钟。

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] }

f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
Pi表示第i件物品的价值,Wi表示第i件物品的重量。
决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?
 
#include
#include
using namespace std;vector
v;int w[5]={
3,3,3,3,3};int p[5]={
5,5,5,5,5};void result(int**c,int i,int j);int main(){ int **c=new int*[6]; for(int i=0;i<6;i++) { *(c+i)=new int[11]; } for(int i=0;i<6;i++) { for(int j=0;j<11;j++) { if(i == 0 || j == 0) { c[i][j]=0; } else { if(w[i-1]>j) { c[i][j]=c[i-1][j]; } else { c[i][j]=max(c[i-1][j-w[i-1]]+p[i-1],c[i-1][j]); } } } } cout<
<
j) { result(c,i-1,j); } else { if(c[i-1][j-w[i-1]]+p[i-1] > c[i-1][j]) { v.push_back(i); result(c,i-1,j-w[i-1]); } else if(c[i-1][j-w[i-1]]+p[i-1] == c[i-1][j]) { vector
temp(v); v.push_back(i); result(c,i-1,j-w[i-1]); v.swap(temp); result(c,i-1,j); } else { result(c,i-1,j); } }}

 

转载于:https://www.cnblogs.com/johnsblog/p/3887546.html

你可能感兴趣的文章
权限术语解释
查看>>
YJX_Driver_015_DDK_HelloWorld卸载例程细化
查看>>
[python]decimal常用操作和需要注意的地方
查看>>
javaee 架构师之路
查看>>
js上传控件 plupload 使用记录
查看>>
java 处理高精度计算
查看>>
golang初学之接口---image
查看>>
Centos6.5DRBD加载失败,系统更换yum源(国内163)
查看>>
Html.ActionLink 几种重载方式说明及例子
查看>>
java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***
查看>>
防火墙的主要性能指标
查看>>
mongodb集群故障转移实践
查看>>
hdu 2836
查看>>
Tomcat6添加MySQL的JNDI数据源
查看>>
supervisor
查看>>
数据库建表经验
查看>>
右侧边栏滑入滑出
查看>>
Handing basic Interactio IOS notes
查看>>
自我介绍
查看>>
【poj1226-出现或反转后出现在每个串的最长公共子串】后缀数组
查看>>