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

Posted pangbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
");
32         else printf("Not divisible
");
33     }
34     return 0;
35 }
View Code

 

以上是关于P1356 数列的整除性 递推,丝毫没dp的感觉的主要内容,如果未能解决你的问题,请参考以下文章

P1356 数列的整数性

noi 2.6_3531判断整除(DP)

数位dp小结以及模板

LeetCode70. 爬楼梯

基础DP总结

[每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式