B. Chips on the Board

发布时间 2023-10-20 16:13:34作者: 不o凡

B. Chips on the Board
题意:保证在n*n的棋盘上对于每一个点的列或者行都有一个筹码,也可以两个都有,问最小筹码:对于每一个筹码计算:a[i]+b[i];

要使每个点都满足,最少的筹码的个数应该为n
1.对于行来看,如果每一行都有一个筹码,那么列就可以随便填:直接全选择最小的列
2.同理对于列,直接选择最小的行

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=3e5 + 10;
#define LL long long
void solve() {
	int n;
	cin >> n;
	vector<int> v1(n), v2(n);
	for (int i = 0; i < n; i++) cin >> v1[i];
	for (int i = 0; i < n; i++) cin >> v2[i];
	int mn1 = *min_element(v1.begin(), v1.end());
	int mn2 = *min_element(v2.begin(), v2.end());//取最小
	LL sum1 = accumulate(v1.begin(), v1.end(), 0LL);
	LL sum2 = accumulate(v2.begin(), v2.end(), 0LL);//累加
	cout << min(1LL*mn1*n + sum2, 1LL*mn2*n + sum1) << '\n';//因为全在一列或者一行所以乘n


}
int main() {
	int t;
	cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}