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;
}

转载于:https://www.cnblogs.com/void-f/p/7661230.html

[USACO]奶牛博览会(DP)相关推荐

  1. usaco Postal Vans(dp)

    是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...

  2. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp

    题目描述 经过了几周的辛苦工作,贝茜终于迎来了一个假期.作为奶牛群中最会社交的牛,她希望去拜访N(1<=N<=50000)个朋友.这些朋友被标号为1..N.这些奶牛有一个不同寻常的交通系统 ...

  3. luogu P2344 奶牛抗议 DP 树状数组 离散化

    P2344 奶牛抗议 最新讨论 暂时没有讨论 题目背景 Generic Cow Protests, 2011 Feb 题目描述 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在 ...

  4. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Description 奶牛们在被划分成N ...

  5. usaco Raucous Rockers(dp)

    dp[i][j]表示到了第i张CD且第i张CD用了j分钟可以装的最多歌曲. /* ID:jinbo wu LANG:C++ TASK: rockers */ #include<bits/stdc ...

  6. USACO / Stamps(DP)

    描述 已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 例如,假设有 1 分和 3 分的邮票:你 ...

  7. A Game USACO 3.3 (DP阵亡)

    这题我是完全不知道从何下手,何为当前最优,而且第二个人也要是最优考虑. 题解给的dp, 状态方程 dp[i][j]=sum[i][j]-min(dp[i+1][j],do[i][j-1]); sum[ ...

  8. USACO 奶牛食品(最大流)

    题目描述 FJ的奶牛们只吃各自喜欢的一些特定的食物和饮料,除此之外的其他食物和饮料一概不吃.某天FJ为奶牛们精心准备了一顿美妙的饭食,但在之前忘记检查奶牛们的菜单,这样显然是不能不能满足所有奶牛的要求 ...

  9. usaco 奶牛集会 奶牛抗议

    奶牛集会 Description 约翰家的N头奶牛每年都会参加"哞哞大会" .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯 ...

最新文章

  1. Portainer 安装与配置
  2. C# ASP.Net 设置外网访问
  3. idea启动多个tomcat失败
  4. 可视化COCO分割标注文件,以及单个json合成coco格式标注文件
  5. 分布式机器学习框架:MxNet
  6. 上传文件显示进度条_文件上传带进度条进阶-断点续传
  7. springboot spring-cloud spring-cloud nacos 整合模板
  8. Linux多线程工作笔记0001---多线程知识介绍
  9. 【Vue】—处理边界情况
  10. Dijkstra算法,起点到当前点的最短距离及路径 C++实现
  11. 对抗样本(三)FGSM
  12. 从零开始开发HybridApp
  13. 计算机网络拓扑星型结构应用,浅谈计算机网络拓扑结构及其应用.doc
  14. 【思维导图】前端开发JavaScript-巩固你的JavaScript知识体系
  15. MT6763 N1 色温模式功能的实现,手动调节色温。
  16. Apple ProRes格式版本
  17. Excel中计算曲线的面积
  18. RESTful Web Service 架构剖析
  19. zabbix学习系列之QQ消息报警
  20. 奥巴马胜选演说·文言版【ZZ】

热门文章

  1. 相机模型--A Unifying Theory for Central Panoramic Systems and Practical Implications
  2. 卫星图像中的车辆分析--A Large Contextual Dataset for Classification, Detection and Counting of Cars
  3. ”device not found“错误原因及解决方法
  4. LeetCode 204. Count Primes--从一开始的质数个数--Python解法--面试算法题
  5. LeetCode 98. Validate Binary Search Tree--C++解法--判断是否是BST--递归,迭代做法,中序遍历
  6. 计算机应用基础统考操作,全国统考计算机应用基础操作题
  7. live2d模型_使用二次元模型动画人物让自己网站“骚起来”
  8. RabbitMQ的集群模式
  9. 面试高频题:Hash一致性算法是如何解决数据倾斜问题的?
  10. MAC OS下使用OpenSSL生成私钥和公钥的方法