Question Solved | The Card Game
Question:
One day, Fred and his N friends were playing a card game in which each player throws a cardwith a number written on it.
The cards are such that a number X is written on front of the card, and the negative of that number is written on the back side of the card. This game has the following rules:
Each of the N players is asked to throw a card.After at the N vards are thrown. Fred has to flip one or more cards in consecutive order , only once.
Your task is to help Fred flip the cards in such a way that the sum of the numbers, on front face of the cards is the maximum.
Input Specification:
input1: An integer N denoting the number of cards(1<=N<=500)
input2: An integer array containing N integer, where the ith integer denotes
The value on the front of the card(-1000<=input2[i]<=1000)
Output Specifications:
Return the maximum sum of the numbers, on the front of the card
Example 1:
Input1 : 5
Input2 : -2 3 -1 -4 -2
Output: 8
Explanation:
Since Fred can flip consecutive cards only once, he chooses to flip the last three cards, which results in the maximum sum (-2+3+1+4+2) i.e. 8
Therefore 8 is returned as the output.
Example 2:
Input1: 5
Input2: -1 2 3 4 -5
Output: 13
Explanation:
Since Fred can flip consecutive cards only once, he chooses to flip the last three cards,
which results in the maximum sum (-1+2+3+4+5) i.e. 13
Therefore 13 is returned as the output.
Input:
5
-2 3 -1 -4 -2
Output:
13
Solution:
Python :
#https://codewindow.in
#join our telegram channel @codewindow
import sys
def minsubarraysum(n, a):
min_sum = sys.maxsize
curr_sum = 0;
for i in range(0, n):
curr_sum = curr_sum + a[i]
if curr_sum < min_sum:
min_sum = curr_sum
if curr_sum > 0:
curr_sum = 0
return min_sum;
n = int(input())
arr = list(map(int, input().split(" ")))
s = sum(arr)
min_sum = minsubarraysum(n, arr)
ans = s + min_sum * (-2)
print(ans)
C++ :
//https://codewindow.in
//join our telegram channel @codewindow
#include<bits/stdc++.h>
using namespace std;
int minsubarraysum(int a[], int n) {
int min_sum = INT_MAX;
int curr_sum = 0;
for (int i = 0 ; i < n; i++) {
curr_sum = curr_sum + a[i];
if (curr_sum < min_sum)
min_sum = curr_sum;
if (curr_sum > 0)
curr_sum = 0;
}
return min_sum;
}
int main() {
int n;
cin >> n;
int a[n];
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
sum += a[i];
}
int min_sum = minsubarraysum(a, n);
int ans = sum + (min_sum * (-2));
cout << ans;
}
You may also like :
Join the conversation