【题解】luogu p2340 奶牛会展

总结:
1.智商从哪开始循环没想到。

2.将智商的正负分开讨论。负智商要用顺序,保证不会使一头牛多用。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN = 800005;
 4 int dp[MAXN], n, iq[405], eq[405], maxx = -2000000;
 5 int main()
 6 {
 7     memset(dp, -0x3f, sizeof(dp));
 8     dp[400000] = 0;
 9     cin >> n;
10     for(int i = 1; i <= n; i++)
11         cin >> iq[i] >> eq[i];
12     for(int i = 1; i <= n; i++)
13         if(iq[i] >= 0)
14         {
15             for(int j = 800000; j >= iq[i]; j--)
16                 dp[j] = max(dp[j], dp[j-iq[i]]+eq[i]);
17         }
18         else {
19             for(int j = 0; j <= 800000+iq[i]; j++)
20                 dp[j] = max(dp[j], dp[j-iq[i]]+eq[i]);
21         }
22     for(int i = 400000; i <= 800000; i++)
23         if(dp[i] >= 0) maxx = max(maxx, i-400000+dp[i]);
24      cout << maxx;
25     return 0;
26 }

背包的变形

原文地址:https://www.cnblogs.com/lovezxy520/p/11306393.html

时间: 2024-11-08 20:46:45

【题解】luogu p2340 奶牛会展的相关文章

洛谷P2340 奶牛会展

洛谷P2340 奶牛会展用下标表示智商,值表示情商 1 #include <bits/stdc++.h> 2 #define For(i,j,k) for(int i=j;i<=k;i++) 3 using namespace std ; 4 5 const int N = 411 ; 6 int n,m ; 7 int a[N],b[N],f[800011] ; 8 9 inline int read() 10 { 11 int x = 0 , f = 1 ; 12 char ch =

【Luogu】P2340奶牛会展

题目链接 突发奇想可以用f[i]表示智商和为i的时候情商最大是多少.这样就变成了一个背包问题. 最后更新答案的时候从0到最大背包容量遍历,最后答案是最大的i+f[i]; 但是虽然答案只能从0到m里选,转移过程中是不能丢掉负数体积的.这是因为人家题目只说了要最后的智商和不能小于零,情商和不能小于零,没说中间不可以. 代码如下. #include<cstdio> #include<cctype> #include<cstring> #include<algorithm

[USACO]奶牛会展(背包)

[USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零.满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值. 输入输出格式 输入格式: ? 第一行:单个整数N,1 ≤ N ≤ 400 ? 第二行到第N + 1 行:第i + 1 行有

luogu P2345 奶牛集会

二次联通门 : luogu P2345 奶牛集会 /* luogu P2345 奶牛集会 权值线段树 以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序 对于要查的牛 每次第i次放入奶牛起作用的v就是vi: 每次ans+=(xi*sum-sumxl)*vi+(sumxr-xi*sum)*vi */ #include <algorithm> #include <cstdio> #define Max 400003 void read (int &now) { now

题解 luogu P1850 【换教室】

题解 luogu P1850 [换教室] 时间:2019.8.6 一晚上(约 3.5h 写完) 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 \(2n\) 节课程安排在 \(n\) 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 \(c_i\) 上课,而另一节课程在教室 \(d_i\) 进行. 在不提交任何申请的情况下,学生们需要

题解 luogu P5021 【赛道修建】

题解 luogu P5021 [赛道修建] 时间:2019.8.9 20:40 时间:2019.8.12 题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 \(m\) 条赛道. C 城一共有 \(n\) 个路口,这些路口编号为 \(1,2,\dots,n\),有 \(n-1\) 条适合于修建赛道的双向通行的道路,每条道路连接着两个路口.其中,第 \(i\) 条道路连接的两个路口编号为 \(a_i\) 和 \(b_i\),该道路的长度为 \(l_i\).借助这 \(n-1\) 条

题解 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows

题解 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题目链接 数据规模16-20的都是状压 如果要每一位都压序号的话空间肯定是不够的,所以每一位只能是0或1.1表示有这头牛,0表示没有这头牛.显然每个位置的选择和他两边的牛有关,所以我们就可以定义这样的状态: f[i][j]表示使用集合i的牛,其中最后一头牛的序号为j时的总方案数.答案从f[(1 << n) - 1][n]累加即可. 转移也比较好想,从i中枚举选出倒数第二头牛,作为子状态的最后一头牛,注意边界情况.

题解 P2340 【奶牛会展】

此题搜索可以过!!! 看到此题,第一想法,是01背包,然而,作为一个蒟蒻,我怎么会打正解呢?,于是就开始打dfs! 想要完成此题,普通的搜索肯定是过不了的(不然要dp干嘛),所以,我们要考虑 剪枝 比较容易的,我们可以轻松想出来剪枝: (不吐槽名字我们还是好朋友...) 1.用数组guji[i]表示搜索到i时,不考虑智商,情商必须大于零的限制,之后能获得的最大智,情商之和.如果当前搜索到的智,情商之和加上guji[i]任然小于等于已经搜出来的ans,那么,当前的状态一定不是最优的(这属于最优性优

【题解】黑白奶牛

题目描述 有N只奶牛从左往右排成一行,编号是1至N.这N只奶牛当中,有一些奶牛是黑色的,其余的是白色的. color[i]表示第i只奶牛的颜色,如果color[i]=0则表示第i头奶牛是黑色的,如果color[i]=1则表示第i头奶牛是白色的. 六一奶牛儿童节快到了,农场主Farmer John要从这N头奶牛当中,挑选尽可能多的奶牛去参加晚会. Farmer John挑选奶牛的原则是:挑选编号是连续的一段奶牛,这一段奶牛的颜色必须全部是白色的. Farmer John有一个魔法棒,每用一次魔法棒