Description

奶牛想证明他们是聪明而风趣的。为此,贝西筹备了一个奶牛博览会,她已经对N头奶牛进行了面试,确定了每头奶牛的智商和情商。

贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零。满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值。

Input Format

第一行:一个整数N,表示奶牛的数量,1 ≤ N ≤ 100

第二行到第N + 1行:第i + 1行有两个用空格分开的整数:Si和Fi,分别表示第i头奶牛的智商和情商,−1000 ≤ Si ≤ 1000,−1000 ≤ Fi ≤ 1000

Output Format

第一行:单个整数,表示情商与智商和的最大值。贝西可以不让任何奶牛参加展览,如果这样应该输出0

Sample Input

5

-5 7

8 -6

6 -3

2 1

-8 -5

Sample Output

8

Hint

(选择 1,3,4 号奶牛,此时智商和为−5 + 6 + 2 = 3,情商和为7 − 3 + 1 = 5。加入 2 号奶牛可使总和提升到10,不过由于情商和变成负的了,所以是不允许的)

Solution

这题很容易想到DP,乍一看有点像01背包,每个牛都有选或者不选,但是仔细分析会发现这样不行。

在转移的过程中很难考虑智商以及情商大于0,简单来说就是有后效性。

那么又看到情商或智商绝对值小于1000,答案最大只能为200000,想到可以使dp[i]表示答案为i的方案是否存在,

但也很难判断智商和情商大于0,所以不妨将答案拆开为2部分,即

dp[i]表示情商和达到i的最大智商为多少

这个地方很关键,理解了这道题就简单了,

情商和为负数的情况也要考虑所以数组下标要向右移一段距离即加上一个常数,

情商最大和为100000,数组就开200000(正负各100000)

然后发现变成了01背包,不过要注意情商是恰好为i而不是不是最大为i,所以开始要把dp数组初始化为负无穷,然后dp[0+M]=0(这里M为一个常数),普通的01背包是初始化为0,原因这里不展开

状态转移的时候,要对w[i]的正负分情况转移,为正倒着做,为负正着做

最后答案就为max{dp[i+M]+i},0<=i<=M且dp[i+M]>0,i为情商dp[i+m]为智商

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int n, m, w[110], v[110], dp[200010]; int main()
{
freopen("in.txt", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d%d", &w[i], &v[i]);
if (w[i] > 0) m += w[i];
}
memset(dp, -127 / 2, sizeof(dp));
dp[m] = 0;
m *= 2;
for (int i = 1; i <= n; ++i) {
if (w[i] > 0)
for (int j = m; j >= w[i]; j--)
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
else for (int j = 0; j <= m + w[i]; j++)
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
int Ans = 0;
m /= 2;
for (int i = 0; i <= m; ++i)
if (dp[i + m] > 0) Ans = max(Ans, dp[i + m] + i);
printf("%d\n", Ans);
return 0;
}

USACO奶牛博览会(DP)的更多相关文章

  1. [USACO]奶牛博览会(DP)

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

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

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

  3. 奶牛抗议 DP 树状数组

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

  4. USACO 奶牛抗议 Generic Cow Protests

    USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...

  5. P2340 奶牛会展 DP 背包

    P2340 奶牛会展 DP \(n\)头牛,每头牛有智商\(s[i]\)情商\(f[i]\),问如何从中选择几头牛使得智商情商之和最大 且 情商之和.智商之和非负 \(n\le 400,-10^3\l ...

  6. [USACO]奶牛抗议(DP+树状数组+离散化)

    Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组 ...

  7. BZOJ_1616_[Usaco2008_Mar]_Cow_Travelling_游荡的奶牛_(DP)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1616 给出一张图,有些点不能走,给出起始点和结束点,以及时间,求在该时间到达结束点的方案数. ...

  8. usaco 奶牛接力

    Description 为增强体质,约翰决定举办一场奶牛接力跑比赛.比赛现场有一些接力位置,这些位置间有T条路连接,第i条路的长度为Li. 有N头奶牛需要参加比赛,领头的奶牛从位置S出发,她会按照你的 ...

  9. [Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]

    Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John ...

随机推荐

  1. 201521123004《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 答:思维导图如下: Java中使用try-catch语法处理异常: try { 可能产生异常的代码段 }catch ...

  2. 201521123087《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名)在自己建立的数据库上执行常见SQL语句(截图)-参考 ...

  3. Spring 级联属性

    Spring 级联属性是当两个bean 关联时  从一个bean 给 另一个bean 赋值 Application xml  配置如下 <bean id="ZhangSan" ...

  4. 逆向实战干货,快速定位自动捡阳光Call,或者标志

    逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...

  5. 【DDD】领域驱动设计实践 —— Application层实现

    本文是DDD框架实现讲解的第二篇,主要介绍了DDD的Application层的实现,详细讲解了service.assemble的职责和实现.文末附有github地址.相比于<领域驱动设计> ...

  6. sdk&jdk&jre

    1. jre and jdkJRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Jav ...

  7. java获取MP3的播放长度

    在开发一个web项目时,需要获取MP3的播放长度.上网找了一些方法,最后找到了一个可以用的java包jaudiotagger-2.2.3.jar,java包网址http://www.jthink.ne ...

  8. 网站如何集成百度UEditor编辑器

    在平时的网站维护使用过程中,富文本编辑器是网站必不可少的元素之一.现在市面上各种编辑器功能设计参差不齐,自己做了几个网站都是用蝉知建站系统做的,而蝉知默认内置的编辑器是KindEditor,功能简单, ...

  9. SSM框架——Spring+SpringMVC+Mybatis的搭建教程

    一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...

  10. Ansible(一) - 入门及安装

    Ⅰ. Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置 ...