博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断整除(动态规划,递推)
阅读量:6869 次
发布时间:2019-06-26

本文共 1326 字,大约阅读时间需要 4 分钟。

总时间限制: 1000ms 内存限制: 65536kB
描述
一个给定的正整数序列,在每个数之前都插入+号或-号后计算它们的和。比如序列:1、2、4共有8种可能的序列:
(+1) + (+2) + (+4) = 7
(+1) + (+2) + (-4) = -1
(+1) + (-2) + (+4) = 3
(+1) + (-2) + (-4) = -5
(-1) + (+2) + (+4) = 5
(-1) + (+2) + (-4) = -3
(-1) + (-2) + (+4) = 1
(-1) + (-2) + (-4) = -7
所有结果中至少有一个可被整数k整除,我们则称此正整数序列可被k整除。例如上述序列可以被3、5、7整除,而不能被2、4、6、8……整除。注意:0、-3、-6、-9……都可以认为是3的倍数。
输入
输入的第一行包含两个数:N(2 < N < 10000)和k(2 < k< 100),其中N代表一共有N个数,k代表被除数。第二行给出序列中的N个整数,这些整数的取值范围都0到10000之间(可能重复)。
输出
如果此正整数序列可被k整除,则输出YES,否则输出NO。(注意:都是大写字母)
样例输入
3 2
1 2 4
样例输出
NO
//特别感谢//https://blog.csdn.net/keyword_/article/details/75303893?utm_source=blogxgwz5#include
#define ll long longusing namespace std;ll f[10001][1001],a[10001];/*把数组定义在int main()外面,初始值为0数组a用来待会存入输入数据数组f是二元数组,从上往下代表一个个处理a[1],a[2]...从左到右是和求余(取模)有关,下几行再讲*/int main(){///输入环节 ll n,k; cin>>n>>k; for(ll i=1;i<=n;i++) cin>>a[i];///处理环节 f[1][a[1]%k]=1; /* 首先f[1][...]的1表示正在处理a[1]这个数, 然后这里用的是标记法:即符合某个条件就标记为1, 所以那个1无计算意义,相当于true,不要纠结它, 然后a[1]%k就是a[1]的模啦, 所以f数组的意义也就明了了. 之所以要定为二元数组而不是一元数组, 就是为了从左到右找到一个横轴下标为a[i]的模, 然后标记为1, 那为什么f数组创建时横轴下标上限为1001而不是无限呢? 因为k有范围,而横轴是存模的, 一个数%k的取值范围在0到k-1之间,不可能超过k */ for(ll i=2;i<=n;i++)//纵轴从2到n,因为第一个的模已经标记了,所以从2开始 for(ll j=0;j

 

转载于:https://www.cnblogs.com/zyacmer/p/9887215.html

你可能感兴趣的文章
OPC UA 统一架构学习2
查看>>
爱占便宜的跑腿
查看>>
Linux安装Zabbix Agent(主动模式、被动模式)
查看>>
思科CCNA200-120×××配置前必须理解的×××基础
查看>>
Pyhton 2.5 高级特性
查看>>
两年了,我写了这些干货!
查看>>
程序员常用借口指南
查看>>
linux 中是否为integer 判断
查看>>
定时自动执行SQL存储过程(图文详解)
查看>>
R语言的包管理功能
查看>>
工厂模式
查看>>
JupyterHub on Kubernetes--定制用户环境
查看>>
sed
查看>>
不以成败论战略
查看>>
我的友情链接
查看>>
一个开源系统的架构分析
查看>>
系统基本功能
查看>>
der pem cer crt key pfx等概念及区别
查看>>
我的友情链接
查看>>
flume-ng 1.5.0安装部署
查看>>