P1356 数列的整除性 递推,丝毫没dp的感觉

题意:给出一串数字,让我们在其中加 + - 号,能加n-1个,正负号任意组合

    只要其中一个结果能整除k,就输出 可以

    全部结果都不能整除,就输出不可以

思路:题意给出的数据范围为n(1e4) k(1e2 )  

    即要除的数只有100这么大,那么每一次枚举,我们显然可以枚举1到100内的数

      只要在当前这个数存在,我们就可以继续枚举

        那么复杂度就是100*1e4  可行

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e4+10;
 4 int dp[maxn][110];
 5 int a[maxn];
 6 int main()
 7 {
 8     int T;
 9     scanf("%d",&T);
10     while(T--){
11         memset(dp,0,sizeof(dp));
12         int n,k;
13         scanf("%d%d",&n,&k);
14         for(int i=1;i<=n;i++){
15             scanf("%d",&a[i]);
16             a[i]=(a[i]%k+k)%k;
17         }
18         dp[1][a[1]]=1;
19         for(int i=2;i<=n;i++){
20             for(int j=0;j<=k;j++){
21                 if(dp[i-1][j]){
22                     int tmp1=j+a[i];
23                     tmp1=(tmp1%k+k)%k;
24                     dp[i][tmp1]=1;
25                     int tmp2=j-a[i];
26                     tmp2=(tmp2%k+k)%k;
27                     dp[i][tmp2]=1;
28                 }
29             }
30         }
31         if(dp[n][0]) printf("Divisible\n");
32         else printf("Not divisible\n");
33     }
34     return 0;
35 }
View Code

 

posted @ 2020-04-04 10:53  古比  阅读(165)  评论(0编辑  收藏  举报