poj(2184)——Cow Exhibition(01背包变形)
来源:互联网 发布:软件系统用户手册 编辑:程序博客网 时间:2024/05/21 09:39
其实我想说这道题我觉得我自己并没有深刻的理解。但是今天做了一下,先把现在的想法记录下来 。
题目的大致意思是:
有N头牛,每头牛都有一个s值代表智商值,f值代表它的幽默值。
然后问你智商值和幽默值的总和值最大是多少,其中必须保证智商值的和与幽默值的和为非负数。
一开始我想到的也是01背包,但是这里还有负值,于是我就没有办法了。于是学习到了一个相当于把坐标平移的方法。
因为这里有-1000到0的值,于是我们把它们全都移到右边去,于是变成了非负值0-2000。
解法:
01背包。
但是要注意的是当x>=0时,我们一维形式的01背包是从后往前查找的(今天我才算真正理解为什么需要的是从前往后推,因为我们要保证前面的不会影响后面的。这句话也许有点抽象,但是我们如果从前面往后面更新的话,那么后面dp得到的值就会发生重复叠加的情况,想想二维的形式也许就可以理解,dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+c[i]) ,当前位置的dp是由上一行的dp以及加上自己的那种情况而得出的,所以是倒着查找)
当x<0时,这时我们要正着for,因为x<0时,相当于它是在负轴上的,相当于它不取x(x在这里是负值),那么就变成了dp[i-x]+y,就是相当于去后面的数,也就是为了保证后面对前面不造成影响。其实我个人的想法是把它看成与x轴正方向相对称的,这样就是从前往后查询了。
还有对于dp的初始化,这里dp[10000]=0,因为它相当于是坐标原点,要往两边扩展,所以初始化为0.
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<vector>using namespace std;#define maxn 200000#define inf 99999999int dp[maxn];int main(){int n;scanf("%d",&n);fill(dp,dp+maxn+1,-inf);dp[100000]=0;for(int i=0;i<n;i++){int x,y;scanf("%d%d",&x,&y);if(x<0&&y<0) continue;if(x>=0){for(int j=maxn;j>=x;j--){dp[j]=max(dp[j],dp[j-x]+y);}}else{for(int j=0;j<=maxn+x;j++){dp[j]=max(dp[j],dp[j-x]+y);}}}int res=-inf;for(int i=100000;i<=maxn;i++){//因为我们要使smart也是非负的,所以要在右半轴上找; if(dp[i]>=0)//dp[i]>=0我们要保证的是fun值也是非负的; res=max(res,dp[i]+i-100000);}if(res<0) printf("0\n");else printf("%d\n",res);}
0 0
- poj(2184)——Cow Exhibition(01背包变形)
- POJ 2184 Cow Exhibition ( 01背包变形 )
- poj 2184 Cow Exhibition(01背包变形)
- POJ 2184 Cow Exhibition(01背包变形)
- poj 2184 Cow Exhibition 01背包变形
- POJ-2184-01背包变形-Cow Exhibition
- POJ 2184Cow Exhibition(01背包变形)
- POJ-2184 Cow Exhibition(01背包变形)
- Poj 2184 Cow Exhibition【01背包 变形】
- POJ 2184 Cow Exhibition 01 背包变形
- poj 2184 Cow Exhibition (变形的01背包)
- POJ 2184 Cow Exhibition(变形01背包)
- POJ 2184 Cow Exhibition(01背包变形)
- poj 2184 Cow Exhibition 01背包变形,正负背包
- POJ 2184 Cow Exhibition 01背包的变形
- POJ 2184 Cow Exhibition (01背包变形 + 技巧 好题)
- POJ 2184 Cow Exhibition(01背包变形 or dfs+剪枝)
- POJ 题目2184 Cow Exhibition(背包变形)
- 剑指offer面试题java实现之题4:替换空格
- POJ 3087 Shuffle'm Up
- 【最小矩形面积覆盖:凸包+旋转卡壳】UVA 10173Smallest Bounding Rectangle
- scala的REPL shell的调用
- 在gentoo中打开tomcat的远程调试开关
- poj(2184)——Cow Exhibition(01背包变形)
- Mac OS xCode5.1 配置 Cocos2d-x 3.0 开发环境
- 基于奇异值分解的图像压缩与除噪
- HDU 3549(网络流入门之最大流)
- linux进程间的通信--共享内存
- java命令行提示:找不到或无法加载主类
- 深入分析ClassLoader
- Qt 判断一个IP地址是否有效
- 初时MVC