博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背包九讲之五(二维费用的背包问题)
阅读量:5372 次
发布时间:2019-06-15

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

http://acm.fafu.edu.cn/problem.php?id=1499

1 /* 2 二维费用的背包问题是指:对于每件物品,具有两种不同的费用, 3 选择这件物品就必须付出这两种代价,每种代价都有可付出的最大值(背包容量) 4 问怎么选择物品才能得到最大价值.费用增加了一维,那么只需要状态增加一维就可以了、 5 dp[i][j][k]  前i件物品付出两种代价为j和k的最大价值 6 dp[i][j][k] = max(dp[i-1][j][k],dp[i-1][j-a[i]][k-b[i]]); 7 根据背包的思想,可将状态压缩为二维的. 8 只不过是费用增加了一维,所以01背包,完全背包,多重完全背包的思想完全 9 可以用在这里10 */11 #include 
12 #include
13 int t[111],v[111],g[111];14 int dp[1111][111];15 int T,V,N;16 inline int max(const int &a, const int &b)17 {18 return a < b ? b : a;19 }20 void zeroOnePack(int t,int v, int g)21 {22 int i,j;23 for(i=T; i>=t; --i)24 for(j=V; j>=v; --j)25 dp[i][j] = max(dp[i][j],dp[i-t][j-v]+g);26 }27 int main()28 {29 int i;30 while(scanf("%d%d%d",&T,&V,&N)!=EOF)31 {32 memset(dp,0,sizeof(dp));33 for(i=1; i<=N; ++i)34 scanf("%d%d%d",&g[i],&t[i],&v[i]);35 for(i=1; i<=N; ++i)36 zeroOnePack(t[i],v[i],g[i]);37 printf("%d\n",dp[T][V]);38 }39 40 return 0;41 }

 但是更多的时候是隐式地给出条件,比如n个物品最多取m个,那么第二维的费用便是个数。

转载于:https://www.cnblogs.com/justPassBy/p/4279674.html

你可能感兴趣的文章
ShareSDk的使用
查看>>
android使用web加载网页的js问题
查看>>
poj 1068 Parencodings
查看>>
docker 数据卷管理
查看>>
如何让一个div的大小,从某一个特定值开始,随内容的增加而自动变化?
查看>>
P1977 出租车拼车(DP)
查看>>
iOS开发--完整项目
查看>>
我的博客园皮肤模板
查看>>
正则表达式
查看>>
java基础:不同进制的表现形式
查看>>
Base64转换为blob对象
查看>>
gulp自动化压缩合并、加版本号解决方案
查看>>
windows下面安装Python和pip教程
查看>>
Java 动态向 JTable 中添加数据
查看>>
平安科技移动开发二队技术周报(第九期)
查看>>
Oracle【二维表管理:约束】
查看>>
2017-2018-1 20155307 《信息安全系统设计基础》第5周学习总结
查看>>
微软职位内部推荐-Principal Dev Manager for Windows Phone Apps
查看>>
jquery改变元素属性值(转)
查看>>
《额尔古纳河右岸》读书笔记
查看>>