Submission #37157390


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class D
    {
        public static void Main()
        {
            using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            var (N, K, D) = Scanner.Scan<int, int, int>();
            var A = Scanner.ScanEnumerable<long>().ToArray();
            var dp = new bool[N + 1, K + 1, D];
            dp[0, 0, 0] = true;
            var dpMax = new long[N + 1, K + 1, D];
            const long inf = (long)1e18;
            for (var i = 0; i <= N; i++)
            {
                for (var k = 0; k <= K; k++)
                {
                    for (var d = 0; d < D; d++)
                    {
                        dpMax[i, k, d] = -inf;
                    }
                }
            }

            dpMax[0, 0, 0] = 0;

            for (var i = 0; i < N; i++)
            {
                for (var k = 0; k <= K; k++)
                {
                    for (var u = 0; u < D; u++)
                    {
                        var v = (u + A[i]) % D;
                        dp[i + 1, k, u] |= dp[i, k, u];
                        dpMax[i + 1, k, u] = Math.Max(dpMax[i + 1, k, u], dpMax[i, k, u]);
                        if (k + 1 <= K)
                        {
                            dp[i + 1, k + 1, v] |= dp[i, k, u];
                            dpMax[i + 1, k + 1, v] = Math.Max(dpMax[i + 1, k + 1, v], dpMax[i, k, u] + A[i]);
                        }
                    }
                }
            }

            var answer = dp[N, K, 0] ? dpMax[N, K, 0] : -1;
            Console.WriteLine(answer);
        }

        public static class Scanner
        {
            public static T Scan<T>() where T : IConvertible => Convert<T>(Scan()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var buffer = Scan();
                return (Convert<T1>(buffer[0]), Convert<T2>(buffer[1]), Convert<T3>(buffer[2]), Convert<T4>(buffer[3]), Convert<T5>(buffer[4]), Convert<T6>(buffer[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => Scan().Select(Convert<T>);
            private static string[] Scan()
            {
                var line = Console.ReadLine()?.Trim() ?? string.Empty;
                return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
            }
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
        }
    }
}

Submission Info

Submission Time
Task D - Max Multiple
User AconCavy
Language C# (.NET Core 3.1.201)
Score 400
Code Size 4357 Byte
Status AC
Exec Time 116 ms
Memory 36860 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 29
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_srnd_00.txt, 01_srnd_01.txt, 01_srnd_02.txt, 01_srnd_03.txt, 01_srnd_04.txt, 01_srnd_05.txt, 01_srnd_06.txt, 01_srnd_07.txt, 02_rnd_00.txt, 02_rnd_01.txt, 02_rnd_02.txt, 02_rnd_03.txt, 02_rnd_04.txt, 02_rnd_05.txt, 02_rnd_06.txt, 02_rnd_07.txt, 03_max_00.txt, 03_max_01.txt, 03_max_02.txt, 04_obvious_00.txt, 04_obvious_01.txt, 04_obvious_02.txt, 04_obvious_03.txt, 05_hand_00.txt, 05_hand_01.txt, 05_hand_02.txt, 05_hand_03.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 79 ms 27712 KiB
00_sample_01.txt AC 79 ms 28260 KiB
01_srnd_00.txt AC 79 ms 27932 KiB
01_srnd_01.txt AC 81 ms 27976 KiB
01_srnd_02.txt AC 82 ms 27972 KiB
01_srnd_03.txt AC 75 ms 27692 KiB
01_srnd_04.txt AC 80 ms 27944 KiB
01_srnd_05.txt AC 77 ms 27964 KiB
01_srnd_06.txt AC 76 ms 27872 KiB
01_srnd_07.txt AC 97 ms 27884 KiB
02_rnd_00.txt AC 91 ms 31388 KiB
02_rnd_01.txt AC 81 ms 28312 KiB
02_rnd_02.txt AC 99 ms 32096 KiB
02_rnd_03.txt AC 96 ms 31540 KiB
02_rnd_04.txt AC 88 ms 29072 KiB
02_rnd_05.txt AC 82 ms 28552 KiB
02_rnd_06.txt AC 83 ms 28112 KiB
02_rnd_07.txt AC 97 ms 32940 KiB
03_max_00.txt AC 116 ms 36808 KiB
03_max_01.txt AC 112 ms 36860 KiB
03_max_02.txt AC 113 ms 36852 KiB
04_obvious_00.txt AC 87 ms 28828 KiB
04_obvious_01.txt AC 84 ms 27972 KiB
04_obvious_02.txt AC 94 ms 27972 KiB
04_obvious_03.txt AC 100 ms 28132 KiB
05_hand_00.txt AC 96 ms 32572 KiB
05_hand_01.txt AC 88 ms 30312 KiB
05_hand_02.txt AC 102 ms 30236 KiB
05_hand_03.txt AC 90 ms 30632 KiB