I Hate Non-integer Number,(线性dp,计数类)

D - I Hate Non-integer Number (atcoder.jp)

Problem Statement

You are given a sequence of positive integers A=(a1​,…,aN​) of length N.
There are (2N−1) ways to choose one or more terms of A. How many of them have an integer-valued average? Find the count modulo 998244353.

Constraints

  • 1≤N≤100
  • 1≤ai​≤109
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
a1​ …… aN​

Output

Print the answer.

Sample 1

InputcopyOutputcopy
3
2 6 2
6

For each way to choose terms of A, the average is obtained as follows:

  • If just a1​ is chosen,the average is an integer.

  • If just a2​ is chosen, the average is an integer.

  • If just a3​ is chosen,the average is an integer.

  • If a1​ and a2​ are chosen, the average is an integer.

  • If a1​ and a3​ are chosen,the average is an integer.

  • If a2​ and a3​ are chosen,  the average is an integer.

  • If a1​, a2​, and a3​ are chosen, the average is  not an integer.

Therefore, 66 ways satisfy the condition.

Sample 2

InputcopyOutputcopy
5
5 5 5 5 5
31

Regardless of the choice of one or more terms of A, the average equals 5.

Sponsor

解析:

dp题我们要进行状态的划分,即集合的划分,且遵循一下划分原则:划分的状态不重不漏,且体现出转移所依据的状态

这到题是一道较难的题目,因此,我们需要发掘题目中的性质,利用性质解决该问题

这里我们可以发现,性质:题目中的有效状态是所选数字的和对所选数字个数取模等于 0

有发现数字个数最多不超过 100 ,因此我们可以使用 取模来进行其中的状态表示。

——————————————————————————————————————

集合划分:f[i][j][k]  表示:前 i 个数中选择 j 个,前 i 个数的和 % j 等于 k

状态转移:
1、f[i-1][j][k]

2、f[i-1][j-1][((k-a[i])%j+j)%j]

但我们发现第 2 个状态转移的中,((k-a[i])%j+j)%j 是想找:前 i-1 个数取 j-1 个,前 i-1 个数的和 % j 等于 ((k-a[i])%j+j)%j 。但实际上 f[i-1][j-1][((k-a[i])%j+j)%j] 前 i-1 个数取 j-1 个, 前 i-1 个数的和 % j-1 等于 ((k-a[i])%j+j)%j

因此这是状态转移过程是错误的。

——————————————————————————————————————————

我们可以改进一下:

集合划分:f[i][j][k]  表示:前 i 个数中选择 j 个,前 i 个数的和 % j 等于 k

状态转移:
1、f[i-1][j][k]

2、f[i-1][j-1][((k-a[i])%p+p)%p]

我们在最外层多加一层循环,表示 p ,这样就可以解决上述问题了。

答案就是 ans=(ans+f[n][p][0])%mod

时间复杂度位O(n^4),不会超时

#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>using namespace std;
typedef long long LL;
const int N = 1e2 + 5;
const LL mod = 998244353;
int n;
LL a[N], f[N][N][N];int main() {cin >> n;for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);}LL ans = 0;for (int p = 1; p <= n; p++) {memset(f, 0, sizeof f);f[0][0][0] = 1;for (int i = 1; i <= n; i++) {for (int j = 0; j <= i && j <= p; j++) {for (int k = 0; k <= p; k++) {f[i][j][k] = f[i - 1][j][k];if (j != 0) {f[i][j][k] = (f[i][j][k] + f[i - 1][j - 1][((k - a[i]) % p + p) % p]) % mod;}//printf("{%d %d %d}: %lld\n", i, j, k, f[i][j][k]);}}}ans = (ans + f[n][p][0]) % mod;}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB】异常数据识别

基于分位数的异常点识别 首先&#xff0c;给定了一个原始数据序列x。然后&#xff0c;计算了序列x的上四分位数和下四分位数&#xff0c;并根据这两个值计算了异常点的阈值。上四分位数减去1.5倍的四分位数范围得到异常值下界&#xff0c;下四分位数加上1.5倍的四分位数范围得…

运行新vue3项目

一&#xff0c;下载node并安装 官网&#xff1a;https://nodejs.org/en/ 查看版本&#xff1a; node -v二&#xff0c;cd进入到vue3项目目录 cd D:\Program-space\HBuilderXProject\Vue3project三&#xff0c;npm install npm install四&#xff0c;查看安装 npm list五&a…

YoloV5改进策略:AKConv即插即用,轻松涨点

文章目录 摘要论文:《AKConv:具有任意采样形状和任意数目参数的卷积核》1、引言2、相关工作3、方法3.1、定义初始采样位置3.2、可变卷积操作3.3、扩展AKConv4、实验4.1、在COCO2017上的目标检测实验4.2、在VOC 7+12上的目标检测实验4.3、在VisDrone-DET2021上的目标检测实验4…

解析生效探测方法

linux dig命令 1.最常用的查询命令 dig baidu.com2 . 根据记录类型进行查询&#xff0c;比如MX&#xff0c;CNAME&#xff0c;NS&#xff0c;PTR等&#xff0c;只需将类型加在命令后面即可。 dig a.shifen.com ns3 . 指定域名DNS服务器测试解析是否生效的命令&#xff0c;以…

centos8 下载

下载网址 Download 直接下载地址 https://mirrors.cqu.edu.cn/CentOS/8-stream/isos/x86_64/CentOS-Stream-8-20231127.0-x86_64-dvd1.iso 这个版本安装的时候方便

一个函数最好只做一件事?未必!这是一个例子

编程实践中&#xff0c;为了模块化设计&#xff0c;降低程序的复杂度&#xff0c;提高程序的可读性&#xff0c;通常设计一个函数时应尽可能简单&#xff0c;简单到只做一件事。然而&#xff0c;工程实践中&#xff0c;有时候受制于一些因素&#xff0c;如内存空间、程序执行效…

大数据Doris(二十九):数据导入(Insert Into)

文章目录 数据导入(Insert Into) 一、​​​​​​​创建导入

算法通关村第五关—Hash基础知识(青铜)

Hash基础 一、Hash的概念和基本特征 哈希(Hash)也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#xff0c;这个输出值就是散列值。很多人可能想不明白&#xff0c;这里的映射到底是啥意思&#xff0c;为啥访问的时间…

MetricBeat安装使用

目录 一、环境准备 二、安装部署 2.1 下载安装包到指定文件夹&#xff0c;并解压 2.2 复制证书文件 2.3 编辑配置文件 2.3 监控系统使用情况 2.3 启动服务 2.3 查看监控信息 一、环境准备 部署模式&#xff1a;单节点部署。监控的服务在哪个机器上则在哪个机器上部署 安…

基于SpringBoot的旅游网站的设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外&#xff0c;随着旅游网站的不断成熟&#xff0c;它彻底改变了过去传统的旅游网站方式&#xff0c;不仅使旅游管理…

支持中文,性能超GPT-4!为开发人员而生的 AI 搜索引擎

生成式AI代码开发平台Phind在官网发布了最新V7版本&#xff0c;性能方面超越GPT-4&#xff0c;运行效率提升了5倍&#xff0c;并且支持中文和16K超长上下文。 据悉&#xff0c;Phind V7是基于Phind的开源代码模型CodeLlama-34B V2&#xff0c;以及700亿个高质量代码和推理问题…

对话框、内部控件位置

一、了解下几个函数 1、movewindow 了解下&#xff1a;MoveWindow 自己塞进去的是屏幕坐标 CrvtFaultRodDlg* dlg new CrvtFaultRodDlg();if (dlg ! NULL){BOOL ret dlg->Create(IDD_DlgCrvtFaultRod, NULL);if (ret) //Create failed.{RECT rect;{RECT rect1;dlg->…

企业数字化转型应对传统网络挑战的关键策略

数字化变革正在以前所未有的速度和规模改变着我们的生活和工作方式&#xff0c;使得传统网络架构面临着巨大的挑战。其中包括带宽需求增加、多云应用增加、安全威胁增加以及传统网络设备无法满足需求等问题。 数字化时代需要更高速、更可靠、更安全的网络支持&#xff0c;传统网…

词嵌入Word Embedding

1. 背景 词嵌入定义为NLP中语言建模和特征学习技术的总称&#xff0c;是一种将文本中的词汇转化成数值向量的方法(将字典中的单词和词组映射成实向量)。 one-hot编码存在的一个主要问题是它无法表示出词汇间的相似度。 2. 分布式表示 分布式表示试图通过考虑上下文词…

西安数字孪生赋能工业制造,加速推进制造业数字化转型

西安数字孪生、5G、工业物联网、工业互联网等新一代信息通信技术与工业制造业经济深度融合&#xff0c;通过对人、机、物、系统等全面连接&#xff0c;构建覆盖全产业链、全价值链的全新制造和服务体系&#xff0c;为工业乃至产业数字化、网络化、智能化发展提供实现途径&#…

Redis String类型

String 类型是 Redis 最基本的数据类型&#xff0c;String 类型在 Redis 内部使用动态长度数组实现&#xff0c;Redis 在存储数据时会根据数据的大小动态地调整数组的长度。Redis 中字符串类型的值最大可以达到 512 MB。 关于字符串需要特别注意∶ 首先&#xff0c;Redis 中所…

Python 3 获取配置文件中的值

1 配置文件内容 config.ini # 登录信息 [login] url https://www.baidu.com username wangxiaoli userpass admin123# 天气信息 [weather] # 是否下雨 rain True # 降雨量 rainvalue 5.05 # 是否下雪 snow False # 降雪量 snowvalue 8.32# SQLServer [sqlserver] user …

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件 一、论文总结PConv模块优势二、YOLOv51. yaml文件2. common代码文件三、YOLOv81. yaml2. modules文件添加3. Task文件4. 测试论文链接🎁 :https://arxiv.org/pdf/2303.0366

低代码平台在数字化转型过程中的定位

内容来自演讲&#xff1a;郭昊东 | 上海外服 | 流程分析工程师 摘要 本文介绍了外服集团的 IT 共享中心在低代码平台应用开发方面的实践经验。他们选择低代码平台的原因包括开发成本低、快速看到实际产品以及能够解决数据孤岛和影子 IT 等问题。他们在应用开发中面临的挑战包括…

基于Java SSM框架+Vue实现汉服文化平台网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现汉服文化平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…