1195:判断整除

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 9531     通过数: 3952

【题目描述】

一个给定的正整数序列,在每个数之前都插入+号或−号后计算它们的和。比如序列: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……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

【分析】

设变量fi,j表示前 i 个数的和是否可以被 j(0不可以,1可以),如果要转移到fi,j的状态,那么就要在前i-1个数已经入列的基础上再加第 i 个数,而第 i 个数又只有正和负两种情况,所以只考虑是由加第 i 个数 和 减第 i 个数就好了。

要想加ai得到余数为 j 的情况,那么前 i-1个数必须满足余数可以为 j-ai。反之,若减ai得到余数可以为 j,那么前 i-1个数必须满足余数可以为j+ai。所以,要想ai入列后,余数为j,那么上述两个条件满足一个就好。

列方程:fi,j = fi-1,j-ai  ||  fi-1,j+ai

边界条件:f0,0=1(0个元素,结果为零,所以不管k为多少,余数都为零)

感谢题解:https://www.cnblogs.com/Wild-Donkey/p/12219856.html

【参考代码】

#include <stdio.h>
#define N 10010
#define M 110
int a[N];
int f[N][M];
int main()
{int i,j,k,n,tmp;scanf("%d%d",&n,&k);for(i=1;i<=n;i++){scanf("%d",&tmp);tmp%=k;a[i]=tmp;}f[0][0]=1;    //递推边界for(i=1;i<=n;i++)for(j=0;j<k;j++)f[i][j]=(f[i-1][(j-a[i]+k)%k]||f[i-1][(j+a[i]+k)%k]); //递推公式 if(f[n][0])printf("YES\n");elseprintf("NO\n");return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1195

信息学奥赛一本通(1195:判断整除)相关推荐

  1. 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 3531:判断整除

    [题目链接] ybt 1195:判断整除 OpenJudge 2.6 3531:判断整除 [题目考点] 1. 动态规划:线性动规 [解题思路] 每次添加的数字可能是正数,可能是负数,这样构成一个数字序 ...

  2. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  3. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  4. 信息学奥赛一本通 第五版(C++版)

    信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...

  5. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  6. 信息学奥赛一本通 1358:中缀表达式值(expr)

    [题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...

  7. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  8. 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例

    题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...

  9. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  10. 信息学奥赛一本通:1219.马走日

    信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...

最新文章

  1. python数据分析常用包_python可视化数据分析常用图大集合(收藏)
  2. 一个小程序看流的读取
  3. 采用dlopen、dlsym、dlclose dlopen dlerror加载动态链接库【总结】
  4. java中ArrayList与LinkedList的区别
  5. ruby 数据sql操作
  6. 微课|Python使用Barrier对象实现多线程同步
  7. LeetCode 199. 二叉树的右视图(DFS)(特殊的递归)
  8. 拓端tecdat|关联规则APRIORI挖掘豆瓣读书评论爬虫采集数据与可视化
  9. 最全jar包下载链接
  10. 德乐Derler T-1series 120G SSD固态硬盘不认盘修复/开卡一例(SM2258XT主控),SM2259XT2可参考
  11. 申请苹果开发者账号流程
  12. C语言课程设计小孩吃梨,IQ题
  13. 鸿蒙手机 OS 等开发必备工具,华为 DevEco Studio 2.1
  14. 辉芒微IO单片机FT60F011A-RB
  15. 算力网络中基于算力标识的算力服务需求匹配
  16. 一起学习C语言:C语言发展历程以及定制学习计划
  17. 对比这10个注意事项,你的网页文字排版达标了么?
  18. pythonmultiprocessing之 queue线程_python中的进程、线程(threading、multiprocessing、Queue、subprocess)...
  19. 行业分析-磁共振造影剂市场现状及未来发展趋势
  20. JAVA设计模式什么鬼(适配器)——作者:凸凹里歐

热门文章

  1. Django最佳实践:项目布局
  2. DotNetNuke 4/5 安装提示 msajax错误,下载AJAX 1.0即可解决
  3. codova添加android慢_Android amp; iOS,请自动开始你们的 battle
  4. GitHub被“中介”攻击了?中间人攻击?
  5. jeecg怎么样好用吗?
  6. 如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联
  7. 2019年文章精选,分类整理,顺带聊几句时间观念
  8. 目标跟踪【更新中...】
  9. Java中super与this
  10. Mask R-CNN