zoukankan      html  css  js  c++  java
  • CF577B Modulo Sum

    原题链接

    • 题意:给出一个序列长度为 (n leqslant 1e6)(a_i leqslant 1e9)然后要求取某些数字,其和为 (m leqslant 3000) 的倍数,是否可以。
    • 题解:先把所有数都作为 (a_i = a_i mod m) 存起来。然后可知,如果数量大于 (m),那么一定有两个数可以构成 (m)。否则,变成 (3000 imes 3000) 的动态规划问题。
    • 代码:
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6 + 10;
    int a[N];
    int dp[3333][3333];
    int n, m;
    map<int,int>mp;
    map<int,int>ans;
    void solve() {
        int n, m;cin >> n >> m;
        if (n > m) {
            puts("YES");return;
        }
        for (int i = 1; i <= n; i ++) {
            cin >> a[i];
            a[i] %= m;
        }
        sort(a + 1, a + 1 + n);
        for (int i = 1; i <= n; i ++) {
            mp[a[i]] =1;
        }
        if (mp[0]) {
            puts("YES
    ");return;
        }   
        reverse(a + 1, a + 1 + n);
        for (int i = 2; i <= n; i ++) {
            dp[i-1][a[i-1]] = 1;
            for (int j =m-1; j >= 0; j--) {
                if (dp[i-1][j]) {
                    dp[i][(j + a[i])%m] = 1;
                }
            }
            for (int j = 0; j <= m; j ++) {
                dp[i][j] = max(dp[i][j], dp[i-1][j]);
            }
        }
        if (dp[n][0]) {
            puts("YES");
        } else
        puts("NO");
    }
    int main() {
        int t = 1;//cin >> t;
        while (t--) solve();
        return 0;
    }
    
  • 相关阅读:
    adobe acrobat 无效批注对象
    分享下今天研究的流量上限DDos攻击分析和解决方式
    【二】【HTML列表、表格与框架】
    大话计算机中的流水作业
    texinfo
    texindex
    texi2dvi
    tex, virtex, initex
    testprns printername [printcapname]
    testparm
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/14745596.html
Copyright © 2011-2022 走看看