hdu 5693 D Game
D Game
今天,它发明了一个游戏: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的更多相关文章
- hdu 5693 && LightOj 1422 区间DP
hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...
- HDU 5693 D Game 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 题解: 一种朴实的想法是枚举选择可以删除的两个或三个数(其他的大于三的数都能凑成2和3的和), ...
- hdu 5693 朋友 博弈
朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...
- HDU 5694---BD String
HDU 5694 Problem Description 众所周知,度度熊喜欢的字符只有两个:B和D.今天,它发明了一种用B和D组成字符串的规则:S(1)=BS(2)=BBDS(3)=BBDBBD ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- PHP不用第三变量交换2个变量的值的解决方法
以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找 ...
- Mysql异常_01_ 誓死登进mysql_Can't connect to MySQL server on 'localhost' (10061)
现象:打开cmd,输入命令:mysql -uroot -p 回车之后,输入密码,结果进不去mysql,并且抛出异常 异常:Can't connect to MySQL server on 'local ...
- java--xml文件读取(JDOM&DOM4J)
1.JDOM解析 首先导入额外的jar包: Build Path:jdom-2.0.6.jar 准备工做获取到子节点的集合: package com.imooc_xml.jdom.text; impo ...
- zoj1360/poj1328 Radar Installation(贪心)
对每个岛屿,能覆盖它的雷达位于线段[x-sqrt(d*d-y*y),x+sqrt(d*d+y*y)],那么把每个岛屿对应的线段求出来后,其实就转化成了经典的贪心法案例:区间选点问题.数轴上有n个闭区间 ...
- 本地未安装Oracle数据库,如何连接远程Oracle数据库
方法一:用Navicat Premium连接 注意,这里用的要是黄色的版本,而不是只针对Mysql的绿色版本 工具栏选择[工具]-[选项],点击[其他-OCI] 你会发现有个OCI librar ...
- ACM学习历程—CodeForces 590A Median Smoothing(分类讨论 && 数学)
题目链接:http://codeforces.com/problemset/problem/590/A 题目大意是给一个串,头和尾每次变换保持不变. 中间的a[i]变成a[i-1],a[i],a[i+ ...
- NOIp2018集训test-10-16 (bike day2)
“毕姥爷:今天的题好简单啊,你们怎么考得这么烂啊,如果是noip你们就凉透了啊“ 今天的题难度应该是3.2.1递减的,但是我不知道哪根筋没搭对,平时我最多1h多就弃题了,今天硬生生写了2h20min的 ...
- django autocommit的一个坑,读操作的事务占用导致锁表
版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/580618150/ 缘由:有一个django守护进程Daemon ...
- js代码--根据经纬度计算距离
原网页地址:http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html <!DOCTYPE html> < ...
- [转]nodejs中的process模块--child_process.exec
1.process是一个全局进程,你可以直接通过process变量直接访问它. process实现了EventEmitter接口,exit方法会在当进程退出的时候执行.因为进程退出之后将不再执行事件循 ...