Hdu5693 D Game
D Game
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 905 Accepted Submission(s): 324
今天,它发明了一个游戏:D游戏。
度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只是代指等差数列[(等差数列百科)](http://baike.baidu.com/view/62268.htm)中的公差D。
这个游戏是这样的,首先度度熊拥有一个公差集合{D},然后它依次写下N个数字排成一行。游戏规则很简单:
1. 在当前剩下的有序数组中选择X(X≥2) 个连续数字;
2. 检查1选择的X个数字是否构成等差数列,且公差 d∈{D};
3. 如果2满足,可以在数组中删除这X个数字;
4. 重复 1−3 步,直到无法删除更多数字。
度度熊最多能删掉多少个数字,如果它足够聪明的话?
每组数据以两个整数 N,M 开始 。接着的一行包括 N 个整数,表示排成一行的有序数组 Ai。接下来的一行是 M 个整数,即给定的公差集合 Di。
1≤N,M≤300
−1 000 000 000≤Ai,Di≤1 000 000 000
3 1
1 2 3
1
3 2
1 2 4
1 2
4 2
1 3 4 3
1 2
2
4
#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; typedef long long ll;
map<ll,int> s;
ll T,n,m,can[][],f[],a[]; int main()
{
scanf("%lld",&T);
while (T--)
{
s.clear();
memset(can,,sizeof(can));
memset(f,,sizeof(f));
scanf("%lld%lld",&n,&m);
for (int i = ; i <= n; i++)
scanf("%lld",&a[i]);
for (int i = ; i <= m; i++)
{
ll x;
scanf("%lld",&x);
s[x] = ;
}
for (int len = ; len <= n; len++)
{
for (int i = ; i + len - <= n; i++)
{
int j = i + len - ;
if (len == )
{
if (s[a[j] - a[i]])
can[i][j] = ;
continue;
}
if (len == )
{
if (a[j] - a[j - ] == a[j - ] - a[i] && s[a[j] - a[j - ]])
can[i][j] = ;
continue;
}
for (int k = i + ; k < j - ; k++)
if (can[i][k] && can[k + ][j])
can[i][j] = ;
if (can[i + ][j - ] && s[a[j] - a[i]])
can[i][j] = ;
for (int k = i + ; k < j - ; k++)
if (can[i + ][k - ] && can[k + ][j - ] && a[j] - a[k] == a[k] - a[i] && s[a[j] - a[k]])
can[i][j] = ;
}
}
for (int i = ; i <= n; i++)
for (int j = ; j < i; j++)
{
f[i] = max(f[i],f[i - ]);
if (can[j][i])
f[i] = max(f[j - ] + i - j + ,f[i]);
}
printf("%lld\n",f[n]);
} return ;
}
Hdu5693 D Game的更多相关文章
- HDU-5693 D Game 动态规划 两次动规
题目链接:https://cn.vjudge.net/problem/HDU-5693 题意 中文题 这个游戏是这样的,首先度度熊拥有一个公差集合{D},然后它依次写下N个数字排成一行.游戏规则很简单 ...
- hdu5693 D game&&hdu 5712 D++ game
题目链接:5693 题目链接:5712 对于这个D game.注意消除之后两遍的序列是可以拼合到一起的!我们可以想到有区间DP的做法.我们设\(f[i][j]\)表示区间i,j可以被消除. 显然如果这 ...
- [总结-动态规划]经典DP状态设定和转移方程
马上区域赛,发现DP太弱,赶紧复习补上. #普通DP CodeForces-546D Soldier and Number Game 筛法+动态规划 待补 UVALive-8078 Bracket S ...
随机推荐
- MapReduce和yarn
1.Mapreduce是什么? Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架: Mapreduce核心功能是将用户编写的业务逻辑代码和自带默 ...
- 445. Cosine Similarity【LintCode java】
Description Cosine similarity is a measure of similarity between two vectors of an inner product spa ...
- vsftpd安装配置虚拟用户
原文发表于cu:2016-03-11 参考文档: FTP原理:http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd_1.php FTP配置:http: ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- presto——java.sql.SQLException: Error executing query与javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?异常问题
使用presto的时候以mysql为presto的数据源 安装的presto是0.95版本:使用的presto-jdbc是0.202的,这里使用jdbc去访问时候,connection可以链接成功,但 ...
- USACO 1.5.4 Checker Challenge跳棋的挑战(回溯法求解N皇后问题+八皇后问题说明)
Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...
- Team Work总结 && OPP课程总结
团队作业总结 工作总结 本次大作业我在团队内的工作是:根据框架构建实现建筑类的功能,包括防御塔.水晶.泉水等建筑.根据架构框架以及结合各建筑的特点,利用继承和多态很快速的解决了一些基本的问题.然而在实 ...
- HttpCookie Class
提供创建和操作各 HTTP Cookie 的类型安全方法. #region 写入指定Cookie的值 +static void WriteCookie(string cookieName, strin ...
- 【前端学习笔记05】JavaScript数据存储Cookie相关方法封装
//Cookie设置 //设置新cookie function setCookie(name,value,duration){ var date = new Date(); date.setTime( ...
- HDU——1788 Chinese remainder theorem again
再来一发水体,是为了照应上一发水题. 再次也特别说明一下,白书上的中国剩余定理的模板不靠谱. 老子刚刚用柏树上的模板交上去,简直wa出翔啊. 下面隆重推荐安叔版同余方程组的求解方法. 反正这个版本十分 ...