又自己写出来了好开心OvO

原题:

24点这个游戏好多人都玩过,就是给你4个数,添加相应的运算符,是否可以得到结果是24.
小x在玩了很多遍这个游戏之后,想把这个游戏给改变一下。
给你n个整数,在n个整数间,只能添加+和- 两种运算符。
比如:给你4个整数: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

现在的问题是:给你n个数,能够构成一个表达式,让这个表达式的值能被某个给定的数整除。
上面的例子中:可以被7整除,但是不能被5整除。

k组数据,k<=20,1<=n<=10000, 2<=x<=100

这道题说是DP实际上算递推吧

关于乘出与取模的DP(递推),枚举取模后的数似乎是一个切入点

这题膜的数<=100,就可以直接开一个二维bool,visited(i,j)表示第i阶段能不能取到某个模j

由于计算过程中会出现负数,所以visited第二维开二倍,用m作为0点,每次枚举1到m*2再减去m即可枚举1-m到m-1

在每个阶段i中枚举上一阶段的1-m到m-1作为模数j,如果上阶段的j能取到,当前阶段的(j-m+a[i])%m+m,(j-m-a[i])%m+m就能取到

最后检查第n阶段能否取到m即可

需要注意:

计算中可能出现负数

visited第二维开双倍

因为是多组数据,所以每组数据visited都要清空

代码:

 //3_108_120_116
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
int n,m,a[];
bool visited[][];
int main(){//freopen("ddd.in","r",stdin);
int T; cin>>T;
while(T --> ){//趋向于
memset(visited,,sizeof(visited));
cin>>n>>m;
for(int i=;i<=n;i++) a[i]=read()%m;
visited[][m]=true;
for(int i=;i<=n;i++)
for(int j=;j<m*;j++)if(visited[i-][j]){
visited[i][(j-m+a[i])%m+m]=true;
visited[i][(j-m-a[i])%m+m]=true;
}
cout<<((visited[n][m])?"Divisible":"Not divisible")<<endl;
}
return ;
}

【P1825】表达式整除的更多相关文章

  1. Core Java 总结(数据类型,表达式问题)

    2016-10-18 整理 写一个程序判断整数的奇偶 public static boolean isOdd(int i){ return i % 2 == 1; } 百度百科定义:奇数(英文:odd ...

  2. [变]C#谜题(1-10)表达式篇

    [变]C#谜题(1-10)表达式篇 最近偶然发现了<Java谜题>,很有意思,于是转到C#上研究一下. 本篇是关于表达式的一些内容. 谜题1:奇数性(负数的取模运算) 下面的方法意图确定它 ...

  3. 2、Python运算符与表达式

    1.运算符 >>>3+5 8 >>>3-5 2 >>>2*3 6 >>>2**3 8 #幂 >>>4/2 2. ...

  4. 三、Python 变量、运算符、表达式

    3.1 变量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,值可以改变,其实是将值在内存中保存地址位交给变量,变量去内存中获取,重新赋值,改变的就是内存地址位. 命名: 变量名由字母.数字 ...

  5. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式

    [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...

  6. python表达式操作符【学习python必知必会】

    运算符 描述 实例 yield x 生成器函数发送协议   lambda args: expression 生成匿名函数   x if y else z 三元选择表达式(c系列有的 python也要有 ...

  7. Python基础0:变量 赋值 表达式和运算符

    变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...

  8. Spring实战学习笔记之SpEL表达式

            在Spring XML配置文件中装配Bean的属性和构造参数都是静态的,而在运行期才知道装配的值,就可以使用SpEL实现         SpEL表达式的首要目标是通过计算获得某个值. ...

  9. Python运算符与表达式

    Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符.成员运算符和身份运算符. 表达式是将不同类型的数据(常亮.变量.函数)用运算符按照一定得规则连接起来的式子. 算术运算符 ...

随机推荐

  1. Scala的第一步

    第一步:学习使用Scala解释器 开始Scala最简单的方法是使用Scala解释器,它是一个编写Scala表达式和程序的交互式“shell”.在使用Scala之前需要安装Scala,可以参考 Firs ...

  2. md5应用

    /* md5工具类 */ public class MD5Util { /**全局数组**/ private final static String[] strDigits = { "0&q ...

  3. windows 下用eclipse搭建java、python开发环境

    本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...

  4. a primary example for Functional programming in javascript

    background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...

  5. C#多线程开发中如何更新UI界面控件内容

    子线程不能修改UI线程的状态(比如文本框里面的内容). 解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文本框. ...

  6. C语言程序设计第6堂作业

              一.  本次课主要内容:             通过几个实例来进一步掌握循环结构的应用. 二. 实验内容:(70分) 1. 穷举算法(古典算术问题-搬砖头)某地需要搬运砖块,已知 ...

  7. C#导入Excel遇到数字字母混合列数据丢失解决

    错误重现: ----------------------------------------------------------------------- 在导入Excel读取数据时,其中的一个字段保 ...

  8. hdu 2062

    ps:11版的最后一题...是个递推题...比如n=5,推出首数字后,n--,继续找下一个 代码: #include "stdio.h" ]; ]; int main(){ lon ...

  9. Caffe 源碼閱讀(六) data_layer.cpp

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  10. 用Android Studio 出现的问题

    解决的办法是cmd--恢复网络设置---netsh winsock reset----重启电脑解决.