站外题(贪心?dp?)玄关
  • 板块学术版
  • 楼主jinzihan0127
  • 当前回复9
  • 已保存回复9
  • 发布时间2025/7/19 15:13
  • 上次更新2025/7/19 17:37:39
查看原帖
站外题(贪心?dp?)玄关
759765
jinzihan0127楼主2025/7/19 15:13

题目内容:

你需要吃掉 XX 个红苹果和 YY 个绿苹果。现在有以下几种苹果:

  • AA 个红苹果,美味度分别为 p1,p2,...,pAp₁, p₂, ..., p_A
  • BB 个绿苹果,美味度分别为 q1,q2,...,qBq₁, q₂, ..., q_B
  • CC 个无色苹果,美味度分别为 r1,r2,...,rCr₁, r₂, ..., r_C

在吃掉无色苹果之前,你可以将其染成红色或绿色,这样它就会被计入红苹果或绿苹果的数量。你需要选择要吃的苹果,使得吃掉的所有苹果的美味度总和最大。

输入格式

输入包含以下内容:

  • 第一行: XYABCX Y A B C
  • 第二行: AA 个红苹果的美味度 p1p₁pAp_A
  • 第三行: BB 个绿苹果的美味度 q1q₁qBq_B
  • 第四行: CC 个无色苹果的美味度 r1r₁rCr_C

输出格式

输出一个整数,表示美味度的最大可能总和。

示例1

输入:
1 2 2 2 1
2 4
5 1
3

输出:
12

示例2

输入:
2 2 2 2 2
8 6
9 1
2 1

输出:
25

示例3

输入:
2 2 4 4 4
11 12 13 14
21 22 23 24
1 2 3 4

输出:
74

数据范围

  • 1XA1051 ≤ X ≤ A ≤ 10^5
  • 1YB1051 ≤ Y ≤ B ≤ 10^5
  • 1C1051 ≤ C ≤ 10^5
  • 1美味度1091 ≤ 美味度 ≤ 10^9

我的代码(马蜂奇怪)

#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[300005],x,y,na,nb,nc,k=0;
int main(){
	cin>>x>>y>>na>>nb>>nc;
	for(int i=1;i<=na;i++)cin>>a[i];
	for(int i=1;i<=nb;i++)cin>>b[i];
	for(int i=1;i<=nc;i++)cin>>c[i];
	sort(a+1,a+na+1,greater<int>());
	sort(b+1,b+na+1,greater<int>());
	for(int i=1;i<=x;i++)c[nc+i]=a[i];
	for(int i=1;i<=y;i++)c[nc+x+i]=b[i];
	sort(c+1,c+nc+x+y+1,greater<int>());
	for(int i=1;i<=x+y;i++)k+=c[i];
	cout<<k;
	return 0;
}

32分WA求调(玄关)

2025/7/19 15:13
加载中...