这道题起初我看是一点思路都没有,后来瞄一眼解题报告才知是另一背包,可还是做不出来,又把结题报告看一遍,才理解,废话不多说了。。。。

这道题主要是有了两个变量,但我们可以先锁定一个变量si,因为有负数,所以将si的范围锁定到1到200000,理由01背包计算出每一个si值所对应的最大值dp【i】,也就是fi,还值得注意的是,01背包的时候si有正有负,当si为正的时候我们就从大往小搜,而si为负是从小往大搜,因为01背包是每个物品只用一次的,而当si为负的时候,恰恰需要我们从小往大搜,保证每个si只用一次,这也是01背包和完全背包的重要区别,大家要注意啊!!!!!!

#include<iostream>
using namespace std;
int si[105],fi[105];
#define N 200005
int max(int x,int y)
{
 return x>y? x:y;
}
int dp[N];
int main()
{
 int n;
 while(cin>>n)
 {
  int inf=-0x7FFFFFFF;//值得注意一开始我就开小了!!!!
  for(int i=0;i<=200000;i++)
  dp[i]=inf;
  dp[100000]=0;// 背包时要有初始值,否则背包进行比较将没有起点
  for(int i=1;i<=n;i++)
  scanf("%d%d",&si[i],&fi[i]);
  for(int i=1;i<=n;i++)
  {
   if(si[i]<0&&fi[i]<0)//注意一下,我已开始忘打了
   continue;
   if(si[i]>0)
   {
    for(int j=200000;j>=si[i];j--)//0-1背包了,注意从大到小
    if(dp[j-si[i]]>inf)
    dp[j]=max(dp[j-si[i]]+fi[i],dp[j]);
   }
   else
   {
    for(int j=si[i];j<=200000+si[i];j++)//0-1背包,从小到大
    if(dp[j-si[i]]>inf)
    dp[j]=max(dp[j-si[i]]+fi[i],dp[j]);
   }
  }
  int ans=inf;
  for(int i=100000;i<=200000;i++)
  {
   if(dp[i]>=0)//这个一定要大于等于,因为fi可以为零
   ans=max(ans,dp[i]+i-100000);
  }
  cout<<ans<<endl;
 }
 return 0;
}

poj Cow Exhibition 01背包的灵活运用相关推荐

  1. DP专题 4 | 骨头收集爱好者 - POJ 1458( 0-1背包)

    背包问题是DP里面变化比较多的问题,可以参考网上的<背包9讲>,另外还是阅读<算竞入门>和<算竞进阶>,讲的最全的肯定是背包9讲,基本上把所有变形都讲了一遍,但是把 ...

  2. poj 1837 blance (01背包)

    题意 : 有一个特俗的天平 c 个指定的位置 g个给定重量的砝码 问用上所有砝码 使天平平衡的方案有几种 思路: dp[i][j+c[k]*g[i]]+=dp[i-1][j]; #include< ...

  3. 暑假N天乐 —— 01背包及变形

    暑假集训的第一天 第二天了. 决定还是先把基础巩固一下好了,万一后面训练赛出事故更尴尬. 所以今天的主题是 -- 01背包及变形 动态规划概念 动态规划(Dynamic programming,DP) ...

  4. POJ2184 Cow Exhibition(DP:变种01背包)

    题意: 一群奶牛分别有s和f两个值,要求选出一些奶牛使s与f的和最大并且s和f分别的和不能为负数. 要点: 用dp[i]=j表示当s的和为i时f的和为j,这样最后只要求dp[i]+i的最大值即可.注意 ...

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

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

  6. bzoj2287【POJ Challenge】消失之物 缺一01背包

    bzoj2287[POJ Challenge]消失之物 缺一01背包 链接 bzoj 思路 分治solve(l,r,arr)表示缺少物品\([l,r]\)的dp数组arr. 然后solve(l,mid ...

  7. 【POJ - 3211】Washing Clothes (dp,0-1背包中点问题)

    题干: Dearboy was so busy recently that now he has piles of clothes to wash. Luckily, he has a beautif ...

  8. 【 POJ - 3628 】Bookshelf 2(dfs 或 dp,0-1背包)

    题干: Farmer John recently bought another bookshelf for the cow library, but the shelf is getting fill ...

  9. POJ 3624 Charm Bracelet 0-1背包

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

  10. 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)

    本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以                降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...

最新文章

  1. 在PyTorch中进行双线性采样:原理和代码详解
  2. 用Python数据分析告诉你:复联哪个英雄人气最高?
  3. FLV 封装格式解析
  4. jfinal多数据源ActiveRecordPlugin
  5. 对象之function
  6. java中servletcontext_Java中的ServletContext对象
  7. maven-antrun-plugin - Target
  8. 6-4 二叉树的非递归遍历 (25分)_本周小结!(二叉树)
  9. python numpy array转置_Python numpy数组转置与轴变换
  10. 【干货】2020十大消费新机遇.pdf(附下载链接)
  11. python数据分析实例_Python数据分析及可视化实例之爬虫源码(05)
  12. 怎样用Sniffer监听网关数据包
  13. [转载]未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
  14. HTTP请求报文与响应报文
  15. hd获取硬盘序列号_获取硬盘序列号
  16. Unity经验分享——如何实现黑洞吸附效果
  17. java设置查看源文件路径
  18. 源码编译更新nginx到最新版本,并开始nginx支持http2协议模块.
  19. 移动web开发rem+js适配布局开发
  20. postgresql模糊查询不区分大小写

热门文章

  1. 再谈new functionName
  2. HDU 1022 Train Problem I
  3. IIS与ASP.NET Http Runtime Pipeline
  4. 查询性能优化 in and union
  5. 迁移cnblog博客
  6. html/css静态网页制作
  7. Android binder机制---概述
  8. C++中的临时对象都是const类型
  9. 删除字符串前面的0,00,000。。。
  10. Mac快速备忘录开启与关闭设置方法