当前位置: 首页 > article >正文

取模+背包

前言:一开始我想错了,一开始我想的是直接统计每一项模完后的和,我们只要能够取到一半,那么就有解,但是时间复杂度太大了

我们做推导
x + y = s u m x + y = sum x+y=sum
x − y = k ∗ n x - y = k * n xy=kn
那么我们可以得到
2 ∗ x − s u m = k ∗ n 2*x - sum = k*n 2xsum=kn
注意:由于取模相当于绕圈圈,所以我们要交替开两个数组记录


题目地址

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

#define int long long

const int N = (int)5e3 + 10;
int n, m;
int a[N];

signed main() {
	cin >> n >> m;
	int cnt = 0;
	for (int i = 1; i <= m; i++) {
		int u; cin >> u;
		a[i] = u % n;
		cnt += a[i];
	}
	cnt %= n;
	vector<int> dp(n+10, 0);
	dp[0] = 1;
	for (int i = 1; i <= m; i++) {
		vector<int> temp = dp;
		for (int j = 0; j <= n; j++) {
			if (dp[j]) {
				temp[(j + a[i]) % n] = 1;
			}
		}
		dp = temp;
	}
	// x + y = s , x - y = k*n
	// 2*x - x = k*n
	int ok = 0;
	for (int i = 0; i <= n; i++) {
		if (dp[i] && ((i * 2 - cnt) % n == 0)) {
			//cout << " i " << i << endl;
			ok = 1; break;
		}
	}
	if (ok) {
		cout << "YES";
	}
	else cout << "NO";
	return 0;
}

http://www.kler.cn/a/282103.html

相关文章:

  • HBase 开发:使用Java操作HBase
  • 【AlphaFold3】开源本地的安装及使用
  • Tomcat启动过程中cmd窗口(控制台)中文乱码的问题
  • 如何使用正则表达式验证域名
  • 【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)
  • 技术周总结 11.11~11.17 周日(Js JVM XML)
  • 【Word与WPS如何冻结首行首列及窗口】
  • Linux常见基础命令
  • 责任链模式-升级版
  • python办公自动化:使用`Python-PPTX`进行文本框和段落操作
  • Python统计FreeMind测试用例数量
  • 【办公类-54-03】20240828班级点名册模版(双休国定假涂成灰色)
  • 网络层 I(网络层的功能)【★★★★★★】
  • wpf prism 《1》、区域 、模块化
  • 2024 年顶级 Flutter UI 框架和库
  • JAVA基础之二-面向对象简述
  • UE5学习笔记16-游戏模式中的一些事件,如何改变网格体和摄像头的碰撞
  • MosaicML-面向生成式AI的机器学习平台
  • 仅利用一维数组实现等值线图效果(附完整代码)
  • TeamTalk消息服务器学习
  • Nuxt3入门:介绍、项目安装和了解视图(第一节)
  • 【Android】Glide模块工作原理
  • 2024最全网络安全工程师面试题(附答案),金九银十找工作必看!
  • CARLA Drone: 首个实现从不同空中视角进行单目3D目标检测,并提供数据集
  • 保证MQ的高可用性:RabbitMQ为例
  • 后端开发刷题 | 面试篇4