1

Тема: Алготестер задача №1683. Захисні маски

Умова.
Захиснi маски. Обмеження: 1 сек., 256 МiБ. Зеник хоче вiдвiдати n магазинiв у вказаному порядку. Щоб зайти в магазин, вiн повинен мати захисну маску.На входi в i-ий магазин продаються одноразовi маски за цiною ai та багаторазовi за цiною bi. Зеник купить не бiльше однiєї маски на входi в i-ий магазин. Якщо вiн придбає одноразову, то використає її тiльки в цьому магазинi, а потiм утилiзує. Багаторазову маску можна використовувати в усiх наступних магазинах.Вам потрiбно сказати, яку найменшу суму грошей Зеник витратить на маски.

Вхiднi данi
У першому рядку задано одне цiле число n - кiлькiсть магазинiв, якi повинен вiдвiдати Зеник.У другому рядку задано n цiлих чисел ai - цiни одноразових масок у гривнях.У третьому рядку задано n цiлих чисел bi - цiни багаторазових масок у гривнях.

Вихiднi данi
Одне число - найменшу суму грошей, яку Зеник витратить на маски (в гривнях).

Обмеження1≤n≤105,1≤ai, bi≤109.
Приклади
Вхiднi данi (stdin)
7
10 12 15 11 9 8 16
100 200 150 40 47 60 74
Вихiднi данi (stdout)77

Вхiднi данi (stdin)
7
10 12 15 11 9 8 16
100 200 150 50 47 60 74
Вихiднi данi (stdout)81
Примiтки.У першому прикладi Зенику вигiдно купити одноразовi маски в перших трьох магазинах i багаторазову в четвертому магазинi. Тодi йому доведеться заплатити 10 + 12 + 15 + 40 = 77грн.У другому прикладi вигiдно придбати одноразовi маски в усiх магазинах.https://algotester.com/uk/ArchiveProble … File/40786

import java.util.Scanner;

public class Main {
    static int n;
    static int[] arr_once;
    static int[] arr_much;
    public static void main(String[] args) {
        System.out.println(result());
    }

    public static void input(){
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        arr_once = new int[n];
        arr_much = new int[n];
        for (int i = 0; i < n; i++) arr_once[i] = scanner.nextInt();
        for (int i = 0; i < n; i++) arr_much[i] = scanner.nextInt();
    }

    public static int result(){
        input();
        int sum_help = 0;
        long S = 9223372036854775807L;
        for (int i = 0; i < n-1; i++){
            sum_help += arr_once[i];
            S = Math.min(sum_help+arr_much[i+1], S );
        }
        return (int) Math.min(S , Math.min(sum_help + arr_once[n-1] , arr_much[0] ));
    }
}

Я йшов спочатку масиву і знаходи вартість, якщо купити першу одноразову і другу багаторазову, дві одноразові і третю багато разову, три одноразові і четверту багаторазову. З цих сум знайшов мінімум і порівняв з сумою всіх одноразових масок і вартістю першої багаторазової. Проте на 13 прикладі помилка.
Щиро вдячний за допомогу!

2

Re: Алготестер задача №1683. Захисні маски

Припущу, що переповнюється sum_help. Туди має влізати 105*109=1014, це long.

Подякували: zxzpogoncuk1