博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【USACO】 奶牛会展
阅读量:5255 次
发布时间:2019-06-14

本文共 1384 字,大约阅读时间需要 4 分钟。

题目背景

奶牛想证明它们是聪明而风趣的。为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行

了面试,确定了每头奶牛的智商和情商。

题目描述

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

输入输出格式

输入格式:

• 第一行:单个整数N,1 ≤ N ≤ 400

• 第二行到第N + 1 行:第i + 1 行有两个整数:Si 和Fi,表示第i 头奶牛的智商和情商,−1000 ≤ Si; Fi ≤ 1000

输出格式:

输出格式

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

输入输出样例

输入样例#1:
5-5 78 -66 -32 1-8 -5
输出样例#1:
8

说明

选择第一头,第三头,第四头奶牛,智商和为−5+6+2 = 3,情商和为7−3+1 = 5。再加

入第二号奶牛可使总和提升到10,不过由于情商和变成负的了,所以是不允许的

 

题解:

以情商为物品容量,智商为价值,做一波背包即可,数组要平移一段 最后统计max(F[i]+i)即可

 

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int N=105,M=100005; 8 int w[N],f[N],F[M*2]; 9 int main()10 {11 int n,m=0;12 scanf("%d",&n);13 for(int i=1;i<=n;i++){scanf("%d%d",&w[i],&f[i]);if(w[i]>0)m+=w[i];}14 m*=2;15 memset(F,-127/3,sizeof(F));16 F[m/2]=0;17 for(int i=1;i<=n;i++)18 {19 if(w[i]>0)20 for(int j=m;j>=w[i];j--)F[j]=max(F[j],F[j-w[i]]+f[i]);21 else22 for(int j=0;j<=m-w[i];j++)F[j]=max(F[j],F[j-w[i]]+f[i]);23 }24 int ans=0,k=m/2;25 for(int i=0;i<=k;i++)if(F[i+k]>=0 && i+F[i+k]>ans)ans=i+F[i+k];26 printf("%d",ans);27 return 0;28 }

 

 

 

转载于:https://www.cnblogs.com/Yuzao/p/7048270.html

你可能感兴趣的文章
Linux命令
查看>>
PHP性能优化利器:生成器 yield理解
查看>>
codevs1044四子连棋(Dfs)
查看>>
常见布局修复方案—选择器特殊性问题
查看>>
C 语言中字符的输入输出
查看>>
Python入门1
查看>>
Goland开发工具安装教程
查看>>
(原创)docker18.03的安装
查看>>
new FunctionName() 运行机制浅析 -----转自玉伯
查看>>
[Swift]LeetCode962. 最大宽度坡 | Maximum Width Ramp
查看>>
vue webpack打包后.css文件里面的背景图片路径错误解决方法
查看>>
第一次作业
查看>>
为什么用思科里面的设备第一次ping的时候总会丢一个包呢?
查看>>
java解析xml禁止校验dtd
查看>>
mybatis实践
查看>>
【GIT】git push 错误解决
查看>>
background-origin和background-origin和2D转换
查看>>
A version is required for an API group definition.
查看>>
Python count()方法
查看>>
【Java并发编程】19、DelayQueue源码分析
查看>>