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

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

题目大意:已知c[i]...c[n]及f[i]...f[n],现要选出一些i,使得当sum{c[i]}和sum{f[i]}均非负时,sum(c[i]+f[i])的最大值。

以sum(c[i])(c[i]>=0)作为背包容量totV,i当作物体,c[i]当作物体体积,f[i]当作物体重量,01背包后,求max{j+DP[j]} (非负)即可。

注意:

  • 这里物体体积存在负数,所以循环j时起始条件不能为j=0!而应当在for下面加if,判断子问题在minJ~maxJ范围之内。
  • 初值不是DP[最左端点]=0,而是DP[0点所在位置]=0。
#include 
#include
#include
using namespace std;const int MAX_V = 200010, MAX_OBJ = 110;#define M(x) x+offset//moveint DP(int minJ, int maxJ, int totObj, int *_v, int *_w){ static int DP[MAX_V]; int offset = max(-minJ, 0); memset(DP, 0xcf, sizeof(DP)); DP[M(0)] = 0; for (int i = 1; i <= totObj; i++) { if (_v[i] <= 0) { for (int j = minJ; j <= maxJ; j++) if (j >= minJ + _v[i] && j <= maxJ + _v[i]) DP[M(j)] = max(DP[M(j)], DP[M(j - _v[i])] + _w[i]); } else { for (int j = maxJ; j >= minJ; j--) if (j >= minJ + _v[i] && j <= maxJ + _v[i]) DP[M(j)] = max(DP[M(j)], DP[M(j - _v[i])] + _w[i]); } } int ans = 0; for (int j = 0; j <= maxJ; j++) if(DP[M(j)] >=0) ans = max(ans, j+DP[M(j)]); return ans;}int main(){#ifdef _DEBUG freopen("c:\\noi\\source\\input.txt", "r", stdin);#endif static int _s[MAX_OBJ], _f[MAX_OBJ]; int n, minS = 0, maxS = 0, cnt = 0, s, f, tempAns = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d%d", &s, &f); if (s >= 0 && f >= 0) { tempAns += s + f; continue; } else if (s <= 0 && f <= 0) continue; else { cnt++; _s[cnt] = s; _f[cnt] = f; _s[cnt] > 0 ? maxS += _s[cnt] : minS += _s[cnt]; } } printf("%d\n", tempAns + DP(minS, maxS, cnt, _s, _f)); return 0;}

  

转载于:https://www.cnblogs.com/headboy2002/p/8525979.html

你可能感兴趣的文章
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>
.net 常用正则表达式
查看>>
Java泛型中的标记符含义:
查看>>
初遇GitHub
查看>>
[C# 网络编程系列]专题八:P2P编程
查看>>
Jsの练习-数组常用方法 -forEach()
查看>>
动态绑定treeview的方法
查看>>
jvm参数
查看>>
3-1 案例环境初始化
查看>>
读《构建之法》第四章和十七章有感
查看>>
01背包
查看>>
开发一个12306网站要多少钱?技术分析12306合格还是不合格
查看>>
Selenium 入门到精通系列:六
查看>>
HTTP与TCP的区别和联系
查看>>
android 实现2张图片层叠效果
查看>>
我个人所有的独立博客wordpress都被挂马
查看>>
html5——动画案例(时钟)
查看>>
调用Android系统“应用程序信息(Application Info)”界面
查看>>