zoukankan      html  css  js  c++  java
  • 最大余数

    给定n个整数, 从中选出若干个数字(每个数字最多选一次),使得它们的和取余m最大,求最大的余数。

    输入

    第一行输入两个整数n(1 le n le 35)n(1n35)和m(1 le m le 10^9)m(1m109)。

    第二行输入n个整数,这些整数属于区间[1, 10^9][1,109]。

    输出

    输出一个整数作为答案。

    样例

    输入

    复制
    4 4
    5 2 4 1

    输出

    复制
    3

    输入

    复制
    3 20
    199 41 299

    输出

    复制
    19

    输入

    复制
    2 10
    2 2

    输出

    复制
    4

    提示

    子任务1,40分,1 le n le 161n16

    子任务2,60分,1 le n le 351n35

    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <set>
    #define MAX 40
    using namespace std;
    int main()
    {
        int n, m;
        int d;
        int ans = 0;
        scanf("%d %d", &n, &m);
        int n1 = (n + 1) / 2;
        std::set<int> s[2];
        s[0].insert(0);
        s[1].insert(0);
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &d);
            int flag = i >= n1;
            std::vector<int> temp;
            for (const int& num : s[flag])
            {
                temp.push_back((d + num) % m);
            }
            for (int& num : temp)
            {
                s[flag].insert(num);
            }
        }
        std::set<int>::reverse_iterator it = s[1].rbegin();
        for (auto& num : s[0])
        {
            while (it != s[1].rend() && num + *it >= m)
            {
                it++;
            }
            if (ans < (num + *it) % m)
            {
                ans = (num + *it) % m;
            }
        }
        printf("%d", ans);
    }
    如果觉得有帮助,点个推荐啦~
  • 相关阅读:
    hutool 解析 Excel
    上传文件
    Cannot construct instance of `com.**` (although at least one Creator exists)
    Java8之Optional
    java8之Stream
    java8之Lambda
    springboot+mybatis事务管理
    queryWrapper in like
    Java 组装 Tree
    JWT
  • 原文地址:https://www.cnblogs.com/8023spz/p/15470247.html
Copyright © 2011-2022 走看看