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 ...
随机推荐
- golang笔记2_程序结构
golang程序结构 2.1 命名 Golang中的命名遵循这样一个简单原则,名字的开头必须是字母或者下划线,后面跟字母.数字或者下划线(这里与C语言中是一致的). 在函数内部声明的实体,即局部变量, ...
- Flip the Bits(思维)
You are given a positive integer n. Your task is to build a number m by flipping the minimum number ...
- 经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
1. 有一个整数数组,请求出两两之差绝对值最小的值.记住,只要得出最小值即可,不需要求出是哪两个数.(Microsoft) 方法1:两两作差求绝对值,并取最小,O( n2 ). 方法2 ...
- Codeforces Round #335 (Div. 2) D. Lazy Student 贪心+构造
题目链接: http://codeforces.com/contest/606/problem/D D. Lazy Student time limit per test2 secondsmemory ...
- android入门 — Activity生命周期
Activity总共有7个回调方法,代表着不同的生命周期的环节. 1.onCreate() 在活动第一次被创建的时候调用.在这个方法中需要完成活动的初始化操作,比如说加载布局.绑定事件等. 2.onS ...
- iOS- 全方位解析.crash文件崩溃报告
1.前言 想来每个iOS攻城狮,都免不了要接触.crash文件 那么什么是.crash文件? iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者 ...
- JDK源码分析 – HashMap
HashMap类的申明 HashMap的定义如下: public class HashMap<K,V> extends AbstractMap<K,V> implements ...
- Windows下IntelliJ IDEA中调试Spark Standalone
参考:http://dataknocker.github.io/2014/11/12/idea%E4%B8%8Adebug-spark-standalone/ 转载请注明来自:http://www.c ...
- Hibernate(七)
三套查询之HQL查询(原文再续书接上一回) where子句部分(查询过滤部分) Hibernate的where子句部分能支持的运算符,表达式.函数特别多,用法与sql语句是一样的. 常用的表达式.运算 ...
- PHP关于传众多参数还是传上下文对象的性能测试
在开发微信公众平台平台的过程中,有这么几个参数总是需要传来传去,$userOpenId,$message,$time. 在整个程序的运行过程中,为了函数方便的处理,将这三个变量一直放在参数列表里.关于 ...