Divisibility
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 6514 | Accepted: 2161 |
Description
Consider an arbitrary sequence of integers. One can place + or - operators between integers in the sequence, thus deriving different arithmetical expressions that evaluate to different values. Let us, for example, take the sequence: 17, 5, -21, 15. There are eight possible expressions: 17 + 5 + -21 + 15 = 16
17 + 5 + -21 - 15 = -14
17 + 5 - -21 + 15 = 58
17 + 5 - -21 - 15 = 28
17 - 5 + -21 + 15 = 6
17 - 5 + -21 - 15 = -24
17 - 5 - -21 + 15 = 48
17 - 5 - -21 - 15 = 18
We call the sequence of integers divisible by K if + or - operators can be placed between integers in the sequence in such way that resulting value is divisible by K. In the above example, the sequence is divisible by 7 (17+5+-21-15=-14) but is not divisible by 5.
You are to write a program that will determine divisibility of sequence of integers.
17 + 5 + -21 - 15 = -14
17 + 5 - -21 + 15 = 58
17 + 5 - -21 - 15 = 28
17 - 5 + -21 + 15 = 6
17 - 5 + -21 - 15 = -24
17 - 5 - -21 + 15 = 48
17 - 5 - -21 - 15 = 18
We call the sequence of integers divisible by K if + or - operators can be placed between integers in the sequence in such way that resulting value is divisible by K. In the above example, the sequence is divisible by 7 (17+5+-21-15=-14) but is not divisible by 5.
You are to write a program that will determine divisibility of sequence of integers.
Input
The first line of the input file contains two integers, N and K (1 <= N <= 10000, 2 <= K <= 100) separated by a space.
The second line contains a sequence of N integers separated by spaces. Each integer is not greater than 10000 by it's absolute value.
The second line contains a sequence of N integers separated by spaces. Each integer is not greater than 10000 by it's absolute value.
Output
Write to the output file the word "Divisible" if given sequence of integers is divisible by K or "Not divisible" if it's not.
Sample Input
4 7 17 5 -21 15
Sample Output
Divisible
Source
状态:
d[i][j]表示前i个数mod k=j是否可达
状态转移方程:
d[i][j]=1 if(d[i-1][((j-a[i])%m+m)%m]||d[i-1][((j+a[i])%m+m)%m])
所以:
所以:
d[i][j]=d[i-1][((j-a[i])%m+m)%m]+d[i-1][((j+a[i])%m+m)%m]
边界:
d[1][(a[1]%m+m)%m]=1
代码:
本文介绍了一种通过动态规划算法来判断一组整数序列是否可以通过加减运算组合使其结果能被特定整数K整除的方法。该算法适用于竞赛编程中涉及整除性的题目,能够高效地解决此类问题。
206

被折叠的 条评论
为什么被折叠?



