zoukankan      html  css  js  c++  java
  • 洛谷 P1356 数列的整数性 解题报告

    P1356 数列的整数性

    题目描述

    对于任意一个整数数列,我们可以在每两个整数中间任意放一个符号'+'或'-',这样就可以构成一个表达式,也就可以计算出表达式的值。比如,现在有一个整数数列:17,5,-21,-15,那么就可以构造出8个表达式:

    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
    

    对于一个整数数列来说,我们能通过如上的方法构造出不同的表达式,从而得到不同的数值,如果该数值能够被k整除的话,那么我们就称该数列能被k整除。 在上面的例子中,该数列能被7整除(17+5+(-21)-15=--14),但不能被5整除。现在你的任务是,判断某个数列是否能被某数整除。

    输入输出格式

    输入格式:

    第一行是一个整数m,表示有m个子任务。接下来就是m个子任务的描述。 每个子任务有两行。第一行是两个整数n和k(1<=n<=10000, 2<=k<=100),n和k中间有一个空格。n 表示数列中整数的个数;k就是需要你判断的这个数列是否能被k 整除。第二行是数列的n个整数,整数间用空格隔开,每个数的绝对值都不超过10000。

    输出格式:

    输出文件应有m 行,依次对应输入文件中的m 个子任务,若数列能被k 整除则输出 "Divisible",否则输出 "Not divisible" ,行首行末应没有空格。


    每个数只有两种操作,加上或者减去,是背包

    但是不能把背包容量放太大,得想办法优化。首先观察一下数据,正确的复杂度应该是(O(MNK))

    我们发现把一个数mod k其实是等价的,在最开始是这样,做的过程也是这样。

    负数呢?如果我们做了负数,我们会发现它和正数的可达性是一样的。当然我们不能不从负数转移,这时候也是取膜放成正数就可以啦


    Code:

    #include <cstdio>
    #include <cstring>
    int max(int x,int y){return x>y?x:y;}
    int abs(int x) {return x>0?x:-x;}
    int dp[2][103],num,n,k,m;
    int main()
    {
        scanf("%d",&m);
        while(m--)
        {
            memset(dp,0,sizeof(dp));
            scanf("%d%d",&n,&k);
            dp[0][0]=1;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&num);
                num%=k;
                num=abs(num);
                for(int j=0;j<=102;j++)
                    dp[i&1][j]=max(dp[i-1&1][abs(j-num)],dp[i-1&1][(j+num)%k]);
            }
            if(dp[n&1][0])
                printf("Divisible
    ");
            else
                printf("Not divisible
    ");
        }
        return 0;
    }
    
    

    2018.7.9

  • 相关阅读:
    Clean Docker <none>:<none>
    Conservation Vs Non-conservation Forms of conservation Equations
    What are the differences between an LES-SGS model and a RANS based turbulence model?
    How to permanently set $PATH on Linux/Unix?
    tar解压命令
    C++ (P199—P211)多态 虚函数 抽象类
    C++ (P160—)多继承 二义性 虚基类 “向上转型”
    java与c++的访问权限的问题
    由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储
    C++ (P103—P154)
  • 原文地址:https://www.cnblogs.com/butterflydew/p/9283134.html
Copyright © 2011-2022 走看看