poj2184-01背包变形(正负背包)
来源:互联网 发布:gunnar 知乎 编辑:程序博客网 时间:2024/04/30 14:38
这里又看到了正负,不过这题的条件更一般,而且是01背包(poj1252是完全背包),在这一题中,可以把智商看做体积,fun看做是价值,背包的体积是没有的,所以用一个不可能的值来代替,主要是用一个shift,shift>max(|c[ i ]|)(不过感觉可以像poj1252的做法一样把正负分开来做)将shift看做0位置,设shift的目的主要是为了防止漏掉首元素为负值的情况。之后对c[ i ]为正值的用v用反序,对c[ i ]为负值的v用正序;从shift到Maxn求最大值就ok了
#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=105;const int Maxn=200100;const int INF=0x3f3f3f3f;const int shift=10000;int c[maxn],w[maxn];int f[Maxn];int main(){ //freopen("int.txt","r",stdin); int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d",&c[i],&w[i]); } memset(f,-INF,sizeof(f)); f[0]=f[shift]=0; for(int i=0;i<n;i++){ if(c[i]>0){ for(int v=Maxn-1;v>=c[i];v--) f[v]=max(f[v],f[v-c[i]]+w[i]); } else for(int v=0;v<Maxn+c[i];v++) f[v]=max(f[v],f[v-c[i]]+w[i]); } int ans=0; for(int i=shift;i<Maxn;i++){ if(f[i]>0&&(i-shift+f[i])>ans){ ans=i-shift+f[i]; } } printf("%d\n",ans); return 0;}
0 0
- poj2184-01背包变形(正负背包)
- poj2184(变形01背包)
- 01背包变形(poj2184)
- poj2184(01背包变形)
- poj2184(01背包变形)
- poj2184 Cow Exhibition 01背包 变形
- POJ2184---Cow Exhibition(01背包变形)
- poj 2184 Cow Exhibition 01背包变形,正负背包
- 01背包 poj2184
- poj2184(Cow Exhibition) 变形0-1背包
- poj2184 Cow Exhibition(01背包+变化)
- POJ2184:Cow Exhibition(类01背包)
- [POJ2184]Cow Exhibition(01背包)
- 背包 poj2184
- 【POJ2184】Cow Exhibition 01背包
- POJ2184 Cow Exhibition 【01背包】
- poj2184 负容量01背包
- poj2184(负权01背包)
- halcon学习笔记——机器视觉工程应用的开发思路
- POJ 2533最长递增子序列O(nlogn) 算法
- C#用DllImport方式调用C++封装的dll库
- UIView部分知识方法
- Hibernate一对多和多对一关系详解 (转载)
- poj2184-01背包变形(正负背包)
- 德研制出世界最小光电信号转换器 直径不到人头发的1/3
- 浅谈JPA的Blob和Clob注解方法
- apk反编译添加admob
- 一步步优化JVM六:优化吞吐量[转]
- ReportStudio入门教程(四) - 过滤器
- 调用是有Api来改变输入光标的颜色
- Objective-C的字符串MD5、SHA1、SHA256、AES加密的实现
- QT中线程调用GUI主线程控件的问题