[贪心] HDU 3661 Assignments

xiaoxiao2021-02-28  54

题意

将2N个任务分成N组,保证每组当中包含一个A任务,一个B任务,每个任务需要花费的钱是a+b-t。问最小花费是多少

思路

令一种任务最大的加上另一种任务最小的来组成一个小组

代码

#include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <map> #include <queue> #include <set> #include <string> #include <vector> using namespace std; typedef long long ll; const int maxn = 1000 + 10; int n, t; int a[ maxn ], b[ maxn ]; int main () { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); while ( ~scanf ( "%d%d", &n, &t ) ) { for ( int i = 0; i < n; ++i ) scanf ( "%d", &a[ i ] ); for ( int i = 0; i < n; ++i ) scanf ( "%d", &b[ i ] ); sort ( a, a + n ); reverse ( a, a + n ); sort ( b, b + n ); int sum = 0; for ( int i = 0; i < n; ++i ) sum += a[ i ] + b[ i ] > t ? a[ i ] + b[ i ] - t : 0; printf ( "%d\n", sum ); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2626102.html

最新回复(0)