首页 > 其他分享 >P2340 [USACO03FALL] Cow Exhibition G

P2340 [USACO03FALL] Cow Exhibition G

时间:2024-09-13 18:02:35浏览次数:13  
标签:int 智商 情商 P2340 Exhibition USACO03FALL 奶牛 400000 1000

[USACO03FALL] Cow Exhibition G

题目背景

题目描述

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

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

输入格式

第一行:单个整数 $N$,$1 \le N \le 400$。

第二行到第 $N+1$ 行:第 $i+1$ 行有两个整数:$S_i$ 和 $F_i$,表示第 $i$ 头奶牛的智商和情商,− $1000 \le S_i;F_i \le 1000$。

输出格式

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

样例 #1

样例输入 #1

5
-5 7
8 -6
6 -3
2 1
-8 -5

样例输出 #1

8

提示

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

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


算法1

(01背包)

首先对于每个牛有参加和不参加两种选择,因此可以初步的判断本题是01背包

1.状态定义

f[i][j] : 表示前i头牛智商总和为j的最大情商值

2.状态计算

(1) 当第i头牛不参加f[i][j] = f[i-1][j];

(2) 当第i头牛参加时:f[i][j] = f[i-1][j-v[i]] + w[i];

(3)总结:f[i][j] = max(f[i-1][j],f[i-1][j-v[i]]+w[i]);

3.初始化

本题是求求解最大价值,并且数据中会有负数存在,初始值为-INF;

memset(f,0x3f,sizeof f);

f[0][0] = 0; //前0头牛,智商为0的最大情商价值为0,因为0头牛吗。。。

4.关键点:

状态转移过程中某个时刻 j 可能为负数,但是下标不能为负,因此统一加上一个很大的数400000;

关于移动400000步:

$400$: 牛的最大数量

$[-1000,1000]$ : 智商/情商的取值范围

$400$ * $[-1000至1000]$ = $[-400000,400000]$ = $[0,800000]$

移动后的400000 对应移动前的0,也就是移动前的最小值

移动后的800000 对应移动前的40000,即移动前的最大值

当前智商为负数时,我们需要正序枚举,这是后减去也不会出现重复情况

当我们已经确定过j = 666666的情况,当j = 666660 时v[i] = - 6; 则j = 666666,重复出现

5.最后答案:

枚举$[400000,800000]$,找最大值

C++ 代码

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 450;

int n;
int v[N],w[N];
int f[800005];

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> v[i] >> w[i];
	}
	
	memset(f,-0x3f,sizeof f);   //因为有负数,初始化为最小值
	
	f[400000] = 0;    //f[i] == f[i-400000],即最小值 
	for(int i = 1; i <= n; i++){
		if(v[i] >= 0){   //当前智商是否大于等于0 
			for(int j = 800000; j >= v[i]; j--){
				 f[j] = max(f[j],f[j - v[i]] + w[i]);
			} 
		}else{
			//正序
			for(int j = 0; j <= 800000 + v[i]; j ++){
				f[j] = max(f[j],f[j - v[i]] + w[i]);
			} 
		}
	} 
	int ans = -0x3f3f3f3f;

	for(int i = 400000; i <= 800000; i++){
		if(f[i] >= 0) //当且仅当情商大于等于0时,更新答案
		ans = max(ans,i + f[i] - 400000); 
	}
	cout << ans << endl;
	return 0;
}

标签:int,智商,情商,P2340,Exhibition,USACO03FALL,奶牛,400000,1000
From: https://www.cnblogs.com/ltphy-/p/18412660

相关文章

  • [题解]P1452 【模板】旋转卡壳 | [USACO03FALL] Beauty Contest G
    P1452【模板】旋转卡壳|[USACO03FALL]BeautyContestG旋转卡壳模板题。凸包用的是Andrew算法,就不详述了,具体可以查查资料了解,但提一嘴Andrew算法的一些细节问题:Andrew算法的一些细节Andrew算法的模板代码如下:sort(a+1,a+1+n,cmp);st[++top]=1;for(inti=2;i<=n;i++){ ......
  • Codeforces 1004B Sonya and Exhibition 题解
    题目简述让你构造一个长度为$n$的$01$字符串。一个区间的价值为其中$0$的数量乘以$1$的数量,给出$m$个区间,最大化它们的价值之和。题目分析设区间$[l,r]$中$1$有$x$个,$0$有$y$个,当$x$和$y$最接近的时候,$x\timesy$最大,此结论可以用二次函数进行证明。......
  • P2340 [USACO03FALL] Cow Exhibition G
    原题链接题解1.考虑到每个牛只有选或不选两种选择,这样暴力搜索的思路便产生了2.还是上面的思路,怎么优化呢?想想背包数组,其下标是什么?是体积其值是是什么?是价值是在体积相同的情况下选择价值最高的,本题也是,最优解一定是相同智商里情商最高的3.价值和体积都是负数,怎么解决?cod......
  • P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G
    链接:https://www.luogu.com.cn/problem/P2341题目:思路:tarjan缩点:把所有强连通分量缩成一个点,然后统计出度为0的缩点,如果只有一个,那么能成为明星的数量就是该缩点扩充后的个数;如果不止一个,那就是0.代码:额,就是不知道为什么debug了两节课.......#include<iostream>#include<v......
  • AT_joig2021_d 展覧会 2 (Exhibition 2) 题解
    题目传送门前置知识二分答案解法最小值最大,考虑二分答案。关于check函数的书写,比luoguP1182数列分段SectionII多了个对位置的判定,注意对当前是第一次展出时进行特判。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsigne......
  • 2023 Music Exhibition
    ......
  • 洛谷P2341 [USACO03FALL] 受欢迎的牛 G
    P2341受欢迎的牛G题解这题我们需要了解强连通分量一、定义在有向图\(G\)中,如果两个顶点\(u\),\(v\)间有一条从\(u\)到\(v\)的有向路径,同时还有一条从\(v\)到\(u\)的有向路径,则称两个顶点强连通。如果有向图\(G\)的每两个顶点都强连通,称\(G\)是一个强连通......
  • [刷题笔记] Luogu P2340 [USACO03FALL] Cow Exhibition G
    ProblemSolution乍看可能没有思路。我们注意到本题是牵扯到一头奶牛选or不选的问题,非常自然地想到01背包。接下来我们就尝试将本题背景转换成01背包问题。我们可以将智商转换成容量,情商转换成价值。(当然反过来也可)然后就可以套用01背包板子了:\[f_{i,j}=min(f_{i-1,j},f_{i-1......
  • papamelon 344. 奶牛展览 Cow Exhibition(挑战程序设计竞赛) dp
    地址https://www.papamelon.com/problem/344贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零。满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值。输入第一行:......
  • 洛谷P2341/USACO03FALL 受欢迎的牛
    题意分析题目链接喜欢是单向的,喜欢有传递性……Emmm这听起来好像……对了,就是连通性问题!我们不妨将奶牛之间的喜欢关系表示为一条条单向边,怎么求明星奶牛的数量呢?这里......