题目描述
给定两个整数数组 array1
array2
数组元素按升序排列
假设从array1
array2
中分别取出一个元素可构成一对元素
现在需要取出K
个元素
并对取出的所有元素求和
计算和的最小值
注意:
两对元素如果对应于array1
array2
中的两个下标均相同,则视为同一个元素
输入描述
输入两行数组array1
array2
每行首个数字为数组大小 size
( 0 < size <= 100
)0 < array1(i) <= 10000 < array2(i) <= 1000
接下来一行为正整数k
(0 < k <= array1.size() * array2.size()
)
输出描述
满足要求的最小和
示例一
输入
3 1 1 2
3 1 2 3
2
输出
4
c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int size1, size2;
cin >> size1;
vector<int> array1(size1);
for (int i = 0; i < size1; i++) {
cin >> array1[i];
}
cin >> size2;
vector<int> array2(size2);
for (int i = 0; i < size2; i++) {
cin >> array2[i];
}
int k;
cin >> k;
vector<int> sums;
for (int i = 0; i < size1; i++) {
for (int j = 0; j < size2; j++) {
sums.push_back(array1[i] + array2[j]);
}
}
sort(sums.begin(), sums.end());
int result = 0;
for (int i = 0; i < k; i++) {
result += sums[i];
}
cout << result << endl;
return 0;
}
python
size1, *array1 = map(int, input().split())
size2, *array2 = map(int, input().split())
k = int(input())
sums = []
for i in range(size1):
for j in range(size2):
sums.append(array1[i] + array2[j])
sums.sort()
result = 0
for i in range(k):
result += sums[i]
print(result)
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int size1 = scanner.nextInt();
int[] array1 = new int[size1];
for (int i = 0; i < size1; i++) {
array1[i] = scanner.nextInt();
}
int size2 = scanner.nextInt();
int[] array2 = new int[size2];
for (int i = 0; i < size2; i++) {
array2[i] = scanner.nextInt();
}
int k = scanner.nextInt();
List<Integer> sums = new ArrayList<>();
for (int i = 0; i < size1; i++) {
for (int j = 0; j < size2; j++) {
sums.add(array1[i] + array2[j]);
}
}
Collections.sort(sums);
int result = 0;
for (int i = 0; i < k; i++) {
result += sums.get(i);
}
System.out.println(result);
}
}
js
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let size1, size2, array1, array2, k;
rl.on('line', (line) => {
if (!size1) {
[size1, ...array1] = line.split(' ').map(Number);
} else if (!size2) {
[size2, ...array2] = line.split(' ').map(Number);
} else if (!k) {
k = Number(line);
const sums = [];
for (let i = 0; i < size1; i++) {
for (let j = 0; j < size2; j++) {
sums.push(array1[i] + array2[j]);
}
}
sums.sort((a, b) => a - b);
let result = 0;
for (let i = 0; i < k; i++) {
result += sums[i];
}
console.log(result);
rl.close();
}
});