P2340 奶牛会展 DP

\(n\)头牛,每头牛有智商\(s[i]\)情商\(f[i]\),问如何从中选择几头牛使得智商情商之和最大 且 情商之和、智商之和非负

\(n\le 400,-10^3\le s[i] \le 10^3\)

看似两维难以处理,我们可以先考虑一维,做体积为智商、价值为情商的01背包,最后遍历体积不为负的状态更新答案即可。

需要注意的是,体积可能为负,所以我们整体加\(400\times1000\);负数体积遍历背包时,因为已经压缩了一维,原本要倒序遍历体积,但是这里是负数,所以要正序遍历(否则会覆盖之前的状态)

另外这里的背包体积是恰好填满,所以初值要全部设为-INF,而不是\(0\)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline int read(){
char ch=getchar();int s=0;
bool isf=0;
while((ch<'0'||ch>'9')&&(ch!='-')) ch=getchar();
if(ch=='-'){ch=getchar();isf=1;}
while(ch>='0'&&ch<='9') s=s*10+(ch^'0'), ch=getchar();
if(isf) return -s;
return s;
}
#define MAXN 404
#define BASE 400*1000
int n;
int s[MAXN],f[MAXN];
int dp[800008];
int main(){
n=read();
int mxs=0;
for(int i=1;i<=n;++i) s[i]=read(),f[i]=read(),mxs+=s[i];
memset(dp, -0x3f, sizeof dp);
dp[BASE]=0;
for(int i=1;i<=n;++i){
if(s[i]>=0)
for(int j=BASE+mxs;j>=s[i];--j)
dp[j]=max(dp[j], dp[j-s[i]]+f[i]);
else
for(int j=s[i];j<=BASE+mxs;++j)
dp[j]=max(dp[j], dp[j-s[i]]+f[i]);
}
int ans=0;
for(int i=BASE;i<=mxs+BASE;++i)
if(dp[i]>=0)
ans=max(ans, i-BASE+dp[i]);
printf("%d\n", ans);
return 0;
}

P2340 奶牛会展 DP 背包的更多相关文章

  1. P2340 奶牛会展(状压dp)

    P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...

  2. [USACO]奶牛会展(背包)

    [USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览. ...

  3. 洛谷P2340 奶牛会展

    题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成 ...

  4. 【题解】 洛谷P2340 奶牛会展

    传送门 重新开始打代码Day1 第一眼看感觉不对啊,这道题目好像空间开不下,是不是不能dp... 后来想到了一个思路,他要求的是\(dp_{i,j,k}=j+k\),然后这样子不是很奇怪吗? 直接一维 ...

  5. 【Luogu】P2340奶牛会展

    题目链接 突发奇想可以用f[i]表示智商和为i的时候情商最大是多少.这样就变成了一个背包问题. 最后更新答案的时候从0到最大背包容量遍历,最后答案是最大的i+f[i]; 但是虽然答案只能从0到m里选, ...

  6. 【洛谷P2340】 奶牛会展

    \(奶牛会展\) 题目链接 由于智商之和或情商之和不能为负数,所以直接把智商+情商>0的奶牛加上是布星的 我们考虑背包,不妨将智商当做物品大小,将情商当做价值 我们要求 大小+价值 的最大值 \ ...

  7. 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp

    题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...

  8. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  9. URAL_1018 Binary Apple Tree 树形DP+背包

    这个题目给定一棵树,以及树的每个树枝的苹果数量,要求在保留K个树枝的情况下最多能保留多少个苹果 一看就觉得是个树形DP,然后想出 dp[i][j]来表示第i个节点保留j个树枝的最大苹果数,但是在树形过 ...

随机推荐

  1. C# vb .net实现颜色替换效果滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的颜色替换效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...

  2. robotframework的学习笔记(十八)——RequestsLibrary库的API介绍

    requestsLibrary的关键字不多,常用的就几个. Create Session: 创建一个session,连接某个服务器.Create Ntlm Session: 也是创建一个session ...

  3. CCProxy代理

    只要局域网内有一台机器能够上网,其他机器就可以通过这台机器上安装的CCProxy来代理共享上网,最大程度的减少了硬件费用和上网费用.只需要在服务器上CCProxy代理服务器软件里进行帐号设置,就可以方 ...

  4. S/4HANA Service Management和SAP Field Service Management的集成

    经常有朋友提出这样的问题:"SAP Business Suite里的CRM的Service模块已经通过Addon的方式迁移到了S/4HANA上,并且SAP之前又收购了一家专门做Service ...

  5. 深入理解jvm--性能监控工具

    1.jvm监控工具介绍 1.1.jconsole JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动. 1.2.启动jconsole 通过JD ...

  6. Python学习日记(二十九) 网络编程

    早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息 由于不同机器之间需要通信就产生了网络 软件开发的架构 1.C/S架构 服务器-客户机,即Clien ...

  7. thrift简单示例 (go语言)

    这个thrift的简单示例来自于官网 (http://thrift.apache.org/tutorial/go), 因为官方提供的例子简单易懂, 所以没有必要额外考虑新的例子. 关于安装的教程, 可 ...

  8. 【Docker】iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8480 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name

    启动容器的时候,出现如下错误: Error response / --dport -j DNAT --to-destination ! -i docker0: iptables: No chain/t ...

  9. Gtest:参数化

    转自:玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化 一.前言 在设计测试案例时,经常需要考虑给被测函数传入不同的值的情况.我们之前的做法通常是写一个通 ...

  10. Linux系统 jboss/Tomcat服务器pdf文件乱码问题

    1.新搭建的环境,但是没有字符集,在windows上的电脑上复制了一份宋体, 字体C:\WINDOWS\FONTS\simsun.ttc(也就是宋体,大小为10M),把他重命名为 simsun.ttf ...