[POJ2184]Cow Exhibition(01背包)
来源:互联网 发布:ubuntu使用windows软件 编辑:程序博客网 时间:2024/05/21 10:14
题目:
我是超链接
题意:
n个元素,每个元素都有两种属性s[i]和f[i],满足abs(s[i]),abs(f[i])<=m,现在从中选取若干个元素,使得所有s[i]之和>=0,所有f[i]之和>=0,且最大化s[i]+f[i]的值;n<=100,m<=1000,你可以一个元素也不选
题解:
真是一道01背包的好题?
最大的累计值为100000,但可能有负,我们就要设计0~200000的
注意如下:
1、这种有两个量而且范围很大的可以一维当成数组下标,另一维当成累加的量,因为要求两个数分别的和都大于0,第二个数直接从大于0的范围内找
2、我们都知道s[i]为正数时01背包要从大到小循环,可以保证只选一次;如果s[i]为负数,01背包就要从小到大循环了,这样才能保证只选一次!(s[i]是数组下标!)
代码:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int dp[200005],s[105],f[105];int main(){ int n,i,j; while (scanf("%d",&n)!=EOF) { memset(dp,0x8f,sizeof(dp)); int Minn=dp[0]; dp[100000]=0; for (i=1;i<=n;i++) scanf("%d%d",&s[i],&f[i]); for (i=1;i<=n;i++) { if (s[i]<0 && f[i]<0) continue; if (s[i]<0) { for (j=s[i];j<=s[i]+200000;j++) if (dp[j-s[i]]>Minn) dp[j]=max(dp[j-s[i]]+f[i],dp[j]); } else { for (j=200000;j>=s[i];j--) if (dp[j-s[i]]>Minn) dp[j]=max(dp[j-s[i]]+f[i],dp[j]); } } int ans=0; for (i=100000;i<=200000;i++) if (dp[i]>=0) ans=max(ans,dp[i]+i-100000); printf("%d\n",ans); }}
阅读全文
0 0
- poj2184 Cow Exhibition(01背包+变化)
- POJ2184:Cow Exhibition(类01背包)
- [POJ2184]Cow Exhibition(01背包)
- 【POJ2184】Cow Exhibition 01背包
- POJ2184 Cow Exhibition 【01背包】
- poj2184 Cow Exhibition(p-01背包的灵活运用)
- poj2184 Cow Exhibition(带负值的01背包)
- POJ2184 Cow Exhibition(DP:变种01背包)
- poj2184 Cow Exhibition 01背包 变形
- POJ2184:Cow Exhibition(变种01背包)
- POJ2184---Cow Exhibition(01背包变形)
- POJ2184:Cow Exhibition(变种01背包)
- poj2184(Cow Exhibition) 变形0-1背包
- POJ2184-Cow Exhibition
- poj2184 Cow Exhibition
- poj2184:cow exhibition
- poj2184 Cow Exhibition
- 【POJ2184】Cow Exhibition
- 欢迎使用CSDN-markdown编辑器
- SQL详讲03
- Algorithm-week10
- Java中JDK的区别
- Unity-Unity编辑器Part4
- [POJ2184]Cow Exhibition(01背包)
- ngrok-本地内网端口映射到外网(简单!有效!)
- PyQt5 用QSqlTableModel操作sql数据库(插入新的列和setFilter()的使用)
- keepalived安装教程
- Ubuntu下安装arm-linux-gcc-4.4.1.tar.gz (交叉编译环境)
- 苹果、亚马逊智能家居之争遭遇黑马JCG
- 浅谈Java编程中的内存泄露问题
- 每日产品辣评:丑出境界,苹果发布史上最贵充电宝
- Unity-Unity编辑器Part5