求 k 整除最大元素和(dp)

Description

复制代码
给你一个整数数组,请你在其中选取若干个元素,
使得其和值能被 k 整除,输出和值最大的那个和值。
最后的数字可能很大,所以结果需要对 19260817 取模。

Input

复制代码
第一行是两个正整数 n,k:表示数组的长度,以及被整除的除数 k。
接下来是 n 行,每行是一个正整数 num_i,表示数组中第 i 个数。
n <= 10^5,  k <= 100, num_i <= 10^9。

Output

复制代码
能被 k 整除的元素最大和。

Sample Input

复制代码
5 3
3
5
1
8
6

Sample Output

复制代码
18

思路:

将n个数取余分到0-(k-1)数组内,然后dp,dpij代表前0-i内的数相加,余数为j的最大值。

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>

#include<string>

#include<cstring>

#include<cmath>

#include<ctime>

#include<algorithm>

#include<utility>

#include<stack>

#include<queue>

#include<vector>

#include<set>

#include<math.h>

#include<map>

#include<unordered_map>

using namespace std;

typedef long long LL;

typedef unsigned long long ULL;

const int N = 1000;

LL dp110110;

vector<LL> p110;

LL n,k,x;

bool cmp(LL x, LL y)

{

return x > y;

}

int main() {

cin >> n >> k;

for (int i = 1; i <= n; i++)

{

scanf("%lld", &x);

px % k.push_back(x);

}

for (int i = 0; i <= k-1; i++)

sort(pi.begin(), pi.end(), cmp);

x = 0;

for (int i = 0; i <p0.size(); i++)

x += p0i;

dp00 = x;

for (int i = 1; i <= k - 1; i++)

{

LL sum = 0;

for (int j = 0; j < pi.size(); j++)

{

sum += pij;

x = (j + 1) * i % k;

for (int w = 0; w <= k - 1; w++)

{

if (j == 0) dpiw = max(dpi - 1w, dpiw);

if (dpi - 1w)

dpi(x + w) % k = max(dpi(x + w) % k, dpi - 1w + sum);

}

}

}

cout << dpk-10 % 19260817 << endl;

return 0;

}

相关推荐
shehuiyuelaiyuehao16 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
203号居民17 小时前
LeetCode hot 100 — 141. 环形链表2
算法·leetcode·链表
玖玥拾18 小时前
LeetCode 202 快乐数
算法·leetcode
LuminousCPP18 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
ZhouDevin19 小时前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
Tim_1019 小时前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
船厂电气自动化ai大模型20 小时前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳20 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了66620 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
靠沿21 小时前
贪心算法专题(三)
算法·贪心算法