信息学奥赛一本通(1195:判断整除)
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:判断整除)相关推荐
- 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 3531:判断整除
[题目链接] ybt 1195:判断整除 OpenJudge 2.6 3531:判断整除 [题目考点] 1. 动态规划:线性动规 [解题思路] 每次添加的数字可能是正数,可能是负数,这样构成一个数字序 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- 信息学奥赛一本通 第五版(C++版)
信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通 1358:中缀表达式值(expr)
[题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...
- 信息学奥赛一本通 2021:【例4.6】最大公约数
[题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...
- 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例
题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- 信息学奥赛一本通:1219.马走日
信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...
最新文章
- python数据分析常用包_python可视化数据分析常用图大集合(收藏)
- 一个小程序看流的读取
- 采用dlopen、dlsym、dlclose dlopen dlerror加载动态链接库【总结】
- java中ArrayList与LinkedList的区别
- ruby 数据sql操作
- 微课|Python使用Barrier对象实现多线程同步
- LeetCode 199. 二叉树的右视图(DFS)(特殊的递归)
- 拓端tecdat|关联规则APRIORI挖掘豆瓣读书评论爬虫采集数据与可视化
- 最全jar包下载链接
- 德乐Derler T-1series 120G SSD固态硬盘不认盘修复/开卡一例(SM2258XT主控),SM2259XT2可参考
- 申请苹果开发者账号流程
- C语言课程设计小孩吃梨,IQ题
- 鸿蒙手机 OS 等开发必备工具,华为 DevEco Studio 2.1
- 辉芒微IO单片机FT60F011A-RB
- 算力网络中基于算力标识的算力服务需求匹配
- 一起学习C语言:C语言发展历程以及定制学习计划
- 对比这10个注意事项,你的网页文字排版达标了么?
- pythonmultiprocessing之 queue线程_python中的进程、线程(threading、multiprocessing、Queue、subprocess)...
- 行业分析-磁共振造影剂市场现状及未来发展趋势
- JAVA设计模式什么鬼(适配器)——作者:凸凹里歐
热门文章
- Django最佳实践:项目布局
- DotNetNuke 4/5 安装提示 msajax错误,下载AJAX 1.0即可解决
- codova添加android慢_Android amp; iOS,请自动开始你们的 battle
- GitHub被“中介”攻击了?中间人攻击?
- jeecg怎么样好用吗?
- 如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联
- 2019年文章精选,分类整理,顺带聊几句时间观念
- 目标跟踪【更新中...】
- Java中super与this
- Mask R-CNN