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.
代码如下
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n,k;
int [][]dp=new int [10010][110];
int []a=new int [10010];
n=scanner.nextInt();
k=scanner.nextInt();
for(int i=1;i<=n;i++)
a[i]=scanner.nextInt();
dp[1][((a[1])%k+k)%k]=1;
dp[1][((-a[1])%k+k)%k]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=k;j++){
if(dp[i-1][((j-a[i])%k+k)%k]==1 || dp[i-1][((j+a[i])%k+k)%k]==1)
dp[i][j]=1;
}
}
if(dp[n][0]==1)
{System.out.print("Divisible\n");
}
else
{
System.out.print("Not divisible\n");
}
}
}