HDOJ 5693 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 首先发现如果每次只删两个或者三个的话是肯定可以得到最优解的,因为任意长度的等差数列都可以由2和3组合出来。。短的反而好找。
而且它要求必须是删连续的数,这就类似于括号匹配,对于[A],只有A合法了[A]才合法。只不过还需要多考虑一种<|>构成的长度为三的括号。 可以先预处理出那些段可以删,然后最后dp用f[i]表示前i个数最多可以删多少转移即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#define ll long long
#define maxn 305
using namespace std;
map<int,int> mmp;
bool can[maxn][maxn];
int f[maxn],n,m,T;
int ans,a[maxn],now; inline void pre(){
for(int i=;i<=n;i++) if(mmp.count(a[i]-a[i-])) can[i-][i]=;
for(int i=;i<=n;i++) if((a[i-]<<)==a[i]+a[i-])
if(mmp.count(a[i]-a[i-])) can[i-][i]=; for(int len=;len<=n;len++)
for(int i=len,j=;i<=n;i++,j++){
int tt=a[i]+a[j];
bool flag=!(tt&);
tt>>=;
if(flag&&!mmp.count((a[i]-a[j])>>)) flag=; if(mmp.count(a[i]-a[j])&&can[j+][i-]){
can[j][i]=;
continue;
} for(int k=j+;k<i;k++){
if(can[j][k]&&can[k+][i]){
can[j][i]=;
break;
}
if(flag&&a[k]==tt&&can[j+][k-]&&can[k+][i-]){
can[j][i]=;
break;
}
}
}
} inline void dp(){
for(int i=;i<=n;i++){
f[i]=f[i-];
for(int j=i-;j;j--) if(can[j][i]) f[i]=max(f[i],f[j-]+i-j+);
}
ans=f[n];
} int main(){
scanf("%d",&T);
while(T--){
memset(can,,sizeof(can));
memset(f,,sizeof(f));
mmp.clear(),ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",a+i);
for(int i=;i<=m;i++) scanf("%d",&now),mmp[now]=; pre();
dp(); printf("%d\n",ans);
} return ;
}
HDOJ 5693 D Game的更多相关文章
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDOJ 1326. Box of Bricks 纯水题
Box of Bricks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1004 Let the Balloon Rise
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- hdoj 1385Minimum Transport Cost
卧槽....最近刷的cf上有最短路,本来想拿这题复习一下.... 题意就是在输出最短路的情况下,经过每个节点会增加税收,另外要字典序输出,注意a到b和b到a的权值不同 然后就是处理字典序的问题,当松弛 ...
- HDOJ(2056)&HDOJ(1086)
Rectangles HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...
- 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
前言 不说话,先猛戳 Ranklist 看我排名. 这是用 node 自动刷题大概半天的 "战绩",本文就来为大家简单讲解下如何用 node 做一个 "自动AC机&quo ...
- 最近点对问题 POJ 3714 Raid && HDOJ 1007 Quoit Design
题意:有n个点,问其中某一对点的距离最小是多少 分析:分治法解决问题:先按照x坐标排序,求解(left, mid)和(mid+1, right)范围的最小值,然后类似区间合并,分离mid左右的点也求最 ...
- BFS(八数码) POJ 1077 || HDOJ 1043 Eight
题目传送门1 2 题意:从无序到有序移动的方案,即最后成1 2 3 4 5 6 7 8 0 分析:八数码经典问题.POJ是一次,HDOJ是多次.因为康托展开还不会,也写不了什么,HDOJ需要从最后的状 ...
随机推荐
- ireport写sql语句的按钮在哪
- Sync Data to AWS S3 on Windows Box
1. Install AWS CLI first, windows download link https://s3.amazonaws.com/aws-cli/AWSCLI64.msi 2. The ...
- 查看jar包源码
1.Maven项目 如下图设置后,它会自动下载源文件,这样就能看到了 2.传统Java项目 2.1.安装 Jad 下载 Jad :http://varaneckas.com/jad/ 解压到任意目录即 ...
- tr/td
在HTML中,tr代表行,td代表列. 说明: 1.tr与td必须一起使用,并且输入的内容必须在td里面: 2.td必须在tr里面,表示在一行中的列: 3.在一个tr里面,有x个td,就表示在这一行里 ...
- BZOJ 4823: [Cqoi2017]老C的方块
分析: 我觉得我的网络流白学了...QAQ... 其实数据范围本是无法用网络流跑过去的,然而出题者想让他跑过去,也就跑过去了... 看到题目其实感觉很麻烦,不知道从哪里入手,那么仔细观察所给出的有用信 ...
- 【bzoj3196-二逼平衡树】线段树套平衡树
http://acm.hust.edu.cn/vjudge/problem/42297 [题目描述] 写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间 ...
- 联系人数据存储Demo源代码
源码下载地址:07-联系人数据存储.zip35.8 KB // MJPerson.h // // MJPerson.h // 07-联系人数据存储 // // Created by apple ...
- 谈数据中心SDN与NFV
看到一篇谈论SDN与NFV的文章,分析的还不错,贴过来方便自己后续查阅: http://network.chinabyte.com/175/13095675.shtml 论数据中心SDN与NFV技术关 ...
- bootstrap-table不分页时对数值类型数据的排序
html中的代码 <table id="table"></table> sortData.json的数据如下 [ {"name":&qu ...
- Unordered load/store queue
A method and processor for providing full load/store queue functionality to an unordered load/store ...