D Game

HDU - 5693

众所周知,度度熊喜欢的字符只有两个:B 和D。

今天,它发明了一个游戏:D游戏。

度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差数列百科)](http://baike.baidu.com/view/62268.htm)中的公差D。

这个游戏是这样的,首先度度熊拥有一个公差集合$\{D\}$,然后它依次写下$N$个数字排成一行。游戏规则很简单:

1. 在当前剩下的有序数组中选择$X (X \geq 2)$ 个连续数字;

2. 检查$1$选择的$X$个数字是否构成等差数列,且公差 $d\in \{D\}$;

3. 如果$2$满足,可以在数组中删除这$X$个数字;

4. 重复 $1 - 3$ 步,直到无法删除更多数字。

度度熊最多能删掉多少个数字,如果它足够聪明的话?

Input第一行一个整数$T$,表示$T(1 \leq T \leq 100)$ 组数据。

每组数据以两个整数 $N$,$M$ 开始 。接着的一行包括 $N$ 个整数,表示排成一行的有序数组 $A_{i}$。接下来的一行是 $M$ 个整数,即给定的公差集合 $D_{i}$。

$1 \leq N, M \leq 300$

$-1\ 000\ 000\ 000 \leq A_{i}, D_{i} \leq 1\ 000\ 000\ 000$ 
Output对于每组数据,输出最多能删掉的数字 。Sample Input

3
3 1
1 2 3
1
3 2
1 2 4
1 2
4 2
1 3 4 3
1 2

Sample Output

3
2
4
/*
每删除一段区间,假设区间长度为len,那么len一定能表示成2*i+3*j的形式,也就是每次可以只删除长度为2或3的长度即可
过程分两步:
1.先处理出f[i][j]=1/0,代表区间[i,j]能否全部删除,首先枚举一个中间点k,能由三种情况转移过来:
①如果[i,k]和[k+1,j]能被删除,那么[l,r]一定能被删除
②如果[i+1,k]和[k+1,r-1]能被删除并且a[i]和a[j]能被删除,那么[l,r]一定能被删除
③如果[i+1,k-1]和[k+1,r-1]能被删除并且a[i],a[k],a[j]能被删除,那么[l,r]一定能被删除
2.dp[i]表示到第i位最多能删除的数字个数,用f[][]转移即可
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define maxn 310
using namespace std;
int n,m,T,a[maxn],dp[maxn];
bool f[maxn][maxn];
map<int,int>mark;
void work1(){
for(int i=;i<=n;i++)if(mark[a[i]-a[i-]])f[i-][i]=;
for(int i=;i<=n;i++)if(a[i-]-a[i-]==a[i]-a[i-]&&mark[a[i]-a[i-]])f[i-][i]=;
for(int len=;len<=n;len++)
for(int i=;i+len-<=n;i++){
int j=i+len-;
for(int k=i+;k<j;k++)f[i][j]|=(f[i][k]&f[k+][j]);
if(mark[a[j]-a[i]])f[i][j]|=f[i+][j-];
for(int k=i+;k<j;k++)
if(a[j]-a[k]==a[k]-a[i]&&mark[a[k]-a[i]])
f[i][j]|=f[i+][k-]&f[k+][j-];
}
}
void work2(){
for(int i=;i<=n;i++){
dp[i]=dp[i-];
for(int j=;j<=i;j++){
if(!f[j][i])continue;
dp[i]=max(dp[i],dp[j-]+i-j+);
}
}
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
mark.clear();
memset(f,,sizeof(f));
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int x;
for(int i=;i<=m;i++){
scanf("%d",&x);
mark[x]=;
}
work1();
work2();
printf("%d\n",dp[n]);
}
}

hdu 5693 D Game的更多相关文章

  1. hdu 5693 && LightOj 1422 区间DP

    hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...

  2. HDU 5693 D Game 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 题解: 一种朴实的想法是枚举选择可以删除的两个或三个数(其他的大于三的数都能凑成2和3的和), ...

  3. hdu 5693 朋友 博弈

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  4. HDU 5694---BD String

    HDU   5694 Problem Description 众所周知,度度熊喜欢的字符只有两个:B和D.今天,它发明了一种用B和D组成字符串的规则:S(1)=BS(2)=BBDS(3)=BBDBBD ...

  5. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  7. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  8. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. UI层自动化测试介绍

    UI指的是用户可以用肉眼可以看到的页面. UI层自动化测试的原理.不论是web端还是移动端,原理都是一样的,就是基于页面元素的识别和定位来进行模拟用户行为. 首先识别到某个元素,比如一个按钮,然后定义 ...

  2. 数据交换格式XML和JSON对比

    1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...

  3. bzoj 1007: [HNOI2008]水平可见直线 半平面交

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=1007; 题解 其实就是求每条直线的上半部分的交 所以做裸半平面交即可 #include ...

  4. shader学习推荐

    <DirectX 9.0 3D游戏开发编程基础> 当您理解了如何实现顶点着色器和像素着色器之后,接下来您可能想进一步了解使用这两种着色器能够实现哪些效果. 最好的方式就是研究一下现有的各种 ...

  5. Erlang pool management -- Emysql pool

    从这篇开始,这一系列主要分析在开源社区中,Erlang 相关pool 的管理和使用. 在开源社区,Emysql 是Erlang 较为受欢迎的一个MySQL 驱动. Emysql 对pool 的管理和使 ...

  6. File:isctype.c Line 68

    刚接触DSP,拿来别人的代码,编译时,发现如下错误: 百思不得琪姐,一番调查之后,发现自己的工程worksapce中有中文路径,怎一个fuck了得.

  7. 【转】Pro Android学习笔记(十一):了解Intent(中)

    Intent的构成 Intent可以带有action,data(由URI表达),extra data(key/value map,键值对),指定的类名(成为component name).一个inte ...

  8. 笔者带你剖析轻量级Sharding中间件——Kratos1.x

    之所以编写Kratos其实存在一个小插曲,当笔者满山遍野寻找成熟.稳定.高性能的Sharding中间件时,确实是翻山越岭,只不过始终没有找到一款合适笔者项目场景的中间件产品.依稀记得当年第一款使用的S ...

  9. web攻击之五:上传漏洞

    [攻击] 在图片上传的时候,攻击者上传非图片,而是可远程执行的的脚本,这时候,入侵者就可以远程的执行脚本来对服务器进行攻击 [防御] 1.限制文件上传类型 2.使用第三方文件托管等

  10. CCNet说明文档

    1.CCNet安装步骤 1)    安装CCNet服务器端:CruiseControl.NET-1.8.5.0-Setup.exe 2)    安装CCNet客户端:CruiseControl.NET ...