1 条题解

  • 0
    @ 2025-8-24 23:01:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liaoxingrui
    壶关

    搬运于2025-08-24 23:01:04,当前版本为作者最后更新于2024-04-11 16:55:04,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Content

    给你一个 nnnn 个物理成绩 AiA_inn 个生物成绩 BiB_i。从中取出 aa 个物理成绩和 bb 个生物成绩(不能取同一个位置上的),求总和最大。

    1n1051 \le n \le 10^50a,bn0 \le a,b \le n0Ai,Bi1040 \le A_i,B_i \le 10^4a+b=na + b = n

    Solution

    我们可以知道 a+b=na + b = n,也就是每个位置的成绩都要选一个。

    我们可以通过贪心来做,如果 AiBiA_i - B_i 越大,那么就选他的物理成绩,如果 AiBiA_i - B_i 越小,那么就选他的生物成绩,因为都要选,就不用在考虑空的位置了。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    int n,x,y,z,cnt,ans;
    struct node{
    	int x,y,z;
    }a[N];
    inline bool cmp(node x,node y){
    	return x.z<y.z;
    }
    int main(){
    	cin>>n>>x>>y;
    	for(int i=1;i<=n;i++)
    		cin>>a[i].x;
    	for(int i=1;i<=n;i++){
    		cin>>a[i].y;
    		a[i].z=a[i].x-a[i].y;
    	}
    	sort(a+1,a+n+1,cmp);
    	for(int i=1;i<=y;i++)
    		ans+=a[i].y;
    	for(int i=y+1;i<=n;i++)
    		ans+=a[i].x;
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    10520
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者