假设第一个数组允许进行 k 次修改,求出两个相同大小数组的 Products 的最小总和。在每次修改中,第一个数组的一个数组元素可以增加或减少 2。
例子:
Input : a[] = {1, 2, -3}
b[] = {-2, 3, -5}
k = 5
Output : -31
Explanation:
Here n = 3 and k = 5.
So, we modified a[2], which is -3 and
increased it by 10 (as 5 modifications
are allowed).
Final sum will be :
(1 * -2) + (2 * 3) + (7 * -5)
-2 + 6 - 35
-31
(which is the minimum sum of the array
with given conditions)
Input : a[] = {2, 3, 4, 5, 4}
b[] = {3, 4, 2, 3, 2}
Output : 25
Explanation:
Here, total numbers are 5 and total
modifications allowed are 3. So, modify
a[1], which is 3 and decreased it by 6
(as 3 modifications are allowed).
Final sum will be :
(2 * 3) + (-3 * 4) + (4 * 2) + (5 * 3) + (4 * 2)
6 – 12 + 8 + 15 + 8
25
(which is the minimum sum of the array with
given conditions)
由于我们需要最小化乘积和,我们找到最大的乘积并减少它。通过举一些例子,我们观察到仅对一个元素进行 2*k 次更改就足以获得最小和。基于此观察,我们将每个元素视为我们对其应用所有 k 操作的元素,并跟踪将结果减少到最小值的元素。
C++
// CPP program to find minimum sum of product
// of two arrays with k operations allowed on
// first array.
#include
using namespace std;
// Function to find the minimum product
int minproduct(int a[], int b[], int n, int k)
{
int diff = 0, res = 0;
int temp;
for (int i = 0; i < n; i++) {
// Find product of current elements and update
// result.
int pro = a[i] * b[i];
res = res + pro;
// If both product and b[i] are negative,
// we must increase value of a[i] to minimize
// result.
if (pro < 0 && b[i] < 0)
temp = (a[i] + 2 * k) * b[i];
// If both product and a[i] are negative,
// we must decrease value of a[i] to minimize
// result.
else if (pro < 0 && a[i] < 0)
temp = (a[i] - 2 * k) * b[i];
// Similar to above two cases for positive
// product.
else if (pro > 0 && a[i] < 0)
temp = (a[i] + 2 * k) * b[i];
else if (pro > 0 && a[i] > 0)
temp = (a[i] - 2 * k) * b[i];
// Check if current difference becomes higher
// than the maximum difference so far.
int d = abs(pro - temp);
if (d > diff)
diff = d;
}
return res - diff;
}
// Driver function
int main()
{
int a[] = { 2, 3, 4, 5, 4 };
int b[] = { 3, 4, 2, 3, 2 };
int n = 5, k = 3;
cout << minproduct(a, b, n, k)
<< endl;
return 0;
}
Java
// Java program to find minimum sum
// of product of two arrays with k
// operations allowed on first array.
import java.math.*;
class GFG {
// Function to find the minimum product
static int minproduct(int a[], int b[], int n,
int k)
{
int diff = 0, res = 0;
int temp = 0;
for (int i = 0; i < n; i++) {
// Find product of current elements
// and update result.
int pro = a[i] * b[i];
res = res + pro;
// If both product and b[i] are
// negative, we must increase value
// of a[i] to minimize result.
if (pro < 0 && b[i] < 0)
temp = (a[i] + 2 * k) * b[i];
// If both product and a[i] are
// negative, we must decrease value
// of a[i] to minimize result.
else if (pro < 0 && a[i] < 0)
temp = (a[i] - 2 * k) * b[i];
// Similar to above two cases
// for positive product.
else if (pro > 0 && a[i] < 0)
temp = (a[i] + 2 * k) * b[i];
else if (pro > 0 && a[i] > 0)
temp = (a[i] - 2 * k) * b[i];
// Check if current difference
// becomes higher than the maximum
// difference so far.
int d = Math.abs(pro - temp);
if (d > diff)
diff = d;
}
return res - diff;
}
// Driver function
public static void main(String[] args)
{
int a[] = { 2, 3, 4, 5, 4 };
int b[] = { 3, 4, 2, 3, 2 };
int n = 5, k = 3;
System.out.println(minproduct(a, b, n, k));
}
}
// This code is contributed by Prerna Saini
Python3
# Python program to find
# minimum sum of product
# of two arrays with k
# operations allowed on
# first array.
# Function to find the minimum product
def minproduct(a,b,n,k):
diff = 0
res = 0
for i in range(n):
# Find product of current
# elements and update result.
pro = a[i] * b[i]
res = res + pro
# If both product and
# b[i] are negative,
# we must increase value
# of a[i] to minimize result.
if (pro < 0 and b[i] < 0):
temp = (a[i] + 2 * k) * b[i]
# If both product and
# a[i] are negative,
# we must decrease value
# of a[i] to minimize result.
elif (pro < 0 and a[i] < 0):
temp = (a[i] - 2 * k) * b[i]
# Similar to above two cases
# for positive product.
elif (pro > 0 and a[i] < 0):
temp = (a[i] + 2 * k) * b[i]
elif (pro > 0 and a[i] > 0):
temp = (a[i] - 2 * k) * b[i]
# Check if current difference
# becomes higher
# than the maximum difference so far.
d = abs(pro - temp)
if (d > diff):
diff = d
return res - diff
# Driver function
a = [ 2, 3, 4, 5, 4 ]
b = [ 3, 4, 2, 3, 2 ]
n = 5
k = 3
print(minproduct(a, b, n, k))
# This code is contributed
# by Azkia Anam.
C#
// C# program to find minimum sum
// of product of two arrays with k
// operations allowed on first array.
using System;
class GFG {
// Function to find the minimum product
static int minproduct(int []a, int []b,
int n, int k)
{
int diff = 0, res = 0;
int temp = 0;
for (int i = 0; i < n; i++)
{
// Find product of current elements
// and update result.
int pro = a[i] * b[i];
res = res + pro;
// If both product and b[i] are
// negative, we must increase value
// of a[i] to minimize result.
if (pro < 0 && b[i] < 0)
temp = (a[i] + 2 * k) * b[i];
// If both product and a[i] are
// negative, we must decrease value
// of a[i] to minimize result.
else if (pro < 0 && a[i] < 0)
temp = (a[i] - 2 * k) * b[i];
// Similar to above two cases
// for positive product.
else if (pro > 0 && a[i] < 0)
temp = (a[i] + 2 * k) * b[i];
else if (pro > 0 && a[i] > 0)
temp = (a[i] - 2 * k) * b[i];
// Check if current difference
// becomes higher than the maximum
// difference so far.
int d = Math.Abs(pro - temp);
if (d > diff)
diff = d;
}
return res - diff;
}
// Driver function
public static void Main()
{
int []a = { 2, 3, 4, 5, 4 };
int []b = { 3, 4, 2, 3, 2 };
int n = 5, k = 3;
Console.WriteLine(minproduct(a, b, n, k));
}
}
// This code is contributed by vt_m.
PHP
0 and $a[$i] < 0)
$temp = ($a[$i] + 2 * $k) * $b[$i];
else if ($pro > 0 and $a[$i] > 0)
$temp = ($a[$i] - 2 * $k) * $b[$i];
// Check if current difference becomes higher
// than the maximum difference so far.
$d = abs($pro - $temp);
if ($d > $diff)
$diff = $d;
}
return $res - $diff;
}
// Driver Code
$a = array(2, 3, 4, 5, 4 ,0);
$b =array(3, 4, 2, 3, 2);
$n = 5;
$k = 3;
echo minproduct($a, $b, $n, $k);
// This code is contributed by anuj_67.
?>
Javascript
输出 :
25
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。