题目链接:

https://vjudge.net/problem/POJ-2184

题目大意:

给出num(num<=100)头奶牛的S和F值(-1000<=S,F<=1000),要求在这几头奶牛中选出若干头,使得在其总S值TS和总F值TF均不为负的前提下,求最大的TS+TF值

思路:

可以把S当体积,F当价值做01背包。但是注意是S可为负,所以整体加100000,然后要注意DP顺序,S为负是要顺序,为正时逆序。

还有就是注意DP时的范围,凡是可能影响的都要包括。

 1 //#include<bits/stdc++.h>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn = 105;
 6 const int maxm = 2e5+10;
 7 const int INF = 0x3f3f3f3f;
 8 int v[maxn], w[maxn];
 9 int dp[maxm];
10 int T, n;
11 double m;
12 int main()
13 {
14     int k = 100000;//整体偏移k位,dp[k]就是标准的dp[0]
15     while(cin >> n)
16     {
17         memset(dp, -INF, sizeof(dp));
18         dp[k] = 0;//注意初始化
19         int x, y;
20         for(int i = 0; i < n; i++)
21         {
22             cin >> x >> y;
23
24             //这里不能写if(x+y<0)continue;这是错误的贪心,一开始因为这个地方一直WA,因为有些x+y<0加入是由于x>0 y<0,x的加入使得x和其他的最优解非负
25             if(x <= 0 && y <= 0)continue;//可以直接由贪心排除
26
27             if(x < 0)//x小于0,dp转移方向从前往后,因为每一步dp[i]需要dp[i-x]更新,由于是负数i-x>i
28             {
29                 for(int i = 0; i <= 2 * k + x; i++)
30                     if(dp[i - x] > -INF)//这里不能省略,如果dp[i - x]为-INF,那么就不可以更新前面的值
31                         dp[i] = max(dp[i], dp[i - x] + y);
32             }
33
34             else //x大于0,dp转移方向从后往前,就是01背包
35             {
36                 for(int i = 2 * k; i >= x; i--)
37                     if(dp[i - x] > -INF)
38                         dp[i] = max(dp[i], dp[i - x] + y);
39             }
40         }
41         int ans = 0;
42         for(int i = k; i <= 2 * k; i++)//从k开始,结果减去k
43             if(dp[i] >= 0)//此处必须大于0,因为dp[i]为TF的值,题目要求TF非负
44                 ans = max(ans, dp[i] + i - k);
45         cout<<ans<<endl;
46     }
47     return 0;
48 }

转载于:https://www.cnblogs.com/fzl194/p/8784550.html

POJ-2184 Cow Exhibition---01背包变形(负数偏移)相关推荐

  1. poj 2063 Investment(01背包变形)

    http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...

  2. POJ 2184 Cow Exhibition

    01背包.把一个属性当成费用,另一个属性当成价值.费用可能为负数,处理的时候加上100000就可以了. #include<cstdio> #include<cstring> # ...

  3. poj 1252 Euro Efficiency (01背包变形)

    http://poj.org/gotoproblem?pid=1252 (1)不是单纯的01背包问题,硬币有去有回(即有正有负),这使得用想买你的解法,上限难以确定,所以我开了dp[10000]的数组 ...

  4. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  5. P1734 最大约数和 01背包变形

    传送门 思路:01背包变形题.将i看成重量,i的因子看成价值即可.背包自然是s. /** * From: * Qingdao Agricultural University * Created by ...

  6. hdu 2184 01背包变形

    转自:http://blog.csdn.net/liuqiyao_01/article/details/8753686 题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和fu ...

  7. POJ 3624 Charm Bracelet 0-1背包

    传送门:http://poj.org/problem?id=3624 题目大意:XXX去珠宝店,她需要N件首饰,能带的首饰总重量不超过M,要求不超过M的情况下,使首饰的魔力值(D)最大. 0-1背包入 ...

  8. HDU 2546 饭卡 01背包变形

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. 2022-9-2何以包邮(01背包变形)(c/c++实测满分)

    总结:         此题是背包问题的变形,物品的价值和重量有所改变,背包的容量限制有所改变,但核心动态规划求法没有改变.只需要在背包问题的解法上根据题意对物品表示,答案输出进行改变即可. 背包算法 ...

  10. HDU 3466 01背包变形

    给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...

最新文章

  1. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
  2. Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)
  3. Unmarshaller解析xml文件
  4. ie浏览器框架不显示_thinkphp框架下后台验证码不显示
  5. POJ 1141 Brackets Sequence
  6. QGIS 3. 使用qgis制作三维浮雕地图
  7. 多线程下载辅助类实现
  8. 杭州五大湖风景名胜区
  9. 42多功能高速闭环驱动器使用手册
  10. 什么是CDN资质?什么情况需要办CDN牌照
  11. nginx和ftp搭建图片服务器
  12. 2022年物联网统计数据
  13. PTA 7-63 黑白子交换棋局
  14. tomacat出错_繁星漫天_新浪博客
  15. 一碗酸爽面-倒在黎明前
  16. 如何构建有效的绩效管理(四)
  17. 雷达图+南丁格尔玫瑰图
  18. 软件工程毕业设计课题(12)基于python的毕业设计python校园二手书籍交易网站系统毕设作品源码
  19. Google Nexus 7 二代 刷入 Kail Net Hunter 过程记录!!!
  20. host_network_interfaces_slow_mode_thresholds

热门文章

  1. 中科院计算机专业,中科院计算所博士平均年薪都超过50万了,计算机专业真是可以无脑选的那种...
  2. 8位12指令微程序CPU设计
  3. mysql创建用户并授权语句_MySQL创建用户与授权
  4. 忍者必须死3突然服务器维修,《忍者必须死3》3月12日2:00停服维护公告
  5. reflections歌词翻译_英文歌曲reflection的歌词翻译
  6. dipg(dip歌词翻译中文)
  7. ZIP 压缩解压命令
  8. 如果生活将我们拆散了
  9. 计算机无法显示输入字体,电脑中ps输入字体不显示是怎么回事
  10. html 跑步比赛小游戏,趣味跑步比赛游戏