题解 | #小红取数#

添加逗号

https://www.nowcoder.com/practice/f51c317e745649c0900996fd3f683aed

思路

01背包 + 同余定理

过程

alt alt

代码

#include <iostream>
#include <cstring>

using namespace std;

typedef long long LL;
const int N = 1e3 + 10, K = 1e3 + 10;
LL a[N], f[N][K];
int n, k;

int main()
{
    cin >> n >> k;
    for(int i = 1;i <= n;i ++) cin >> a[i];
    memset(f, -0x3f, sizeof f);
    f[0][0] = 0;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 0;j < k;j ++)
        {
            f[i][j] = f[i - 1][j];
            f[i][j] = max(f[i - 1][(j - a[i] % k + k) % k] + a[i], f[i][j]);
        }
    }
    cout << (f[n][0] == 0 ? -1 : f[n][0]) << endl;
    return 0;
}
全部评论

相关推荐

07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务