烧烤 题解
题目id:11063
题目描述
\(Snuke\)有一个烧烤聚会。
聚会上,他将制作\(N\)份串烧。
$\ \ \ \ \ \ \ $一份串烧
他有\(2N\)根烤肉钎子,它们都将用于制作串烧。第i个烤肉钎子的长度为Li。此外,他有无限供应的原料。他将原料串在两根烤肉钎子上做成一份串烧。一份串烧可串起的原料的最大数量取决于较短的那根烤肉钎子。
他怎么样串可以使得这\(N\)份串烧的原料数量总和最大?
解题思路
和这题很像,最短的两根烤肉钎子肯定配对,次小的一对配对\(......\)最大的一对配对。
那么这题就很简单了,把烤肉钎子按长度从小到大排序,由于一份串烧可串起的原料的最大数量取决于较短的那根烤肉钎子这个条件,答案就是最小的烤肉钎子的长度\(+\)第\(3\)小的烤肉钎子的长度\(+......+\)第二大的烤肉钎子的长度,既\(i\)每次\(+2\),\(ans=\sum\limits_{i=1}^{2N}{a_i}\)。
AC Code
#include<bits/stdc++.h>
#define N 1000007
#define INF 1e18
#define MOD 998244353
#define LL long long
#define pb push_back
#define lb long double
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
LL n,a[N],ans;
int main()
{
cin>>n;
for(int i=1;i<=2*n;++i)
cin>>a[i];
sort(a+1,a+2*n+1);
for(LL i=1;i<=2*n;i+=2)
ans+=a[i];
cout<<ans;
return 0;
}