D Game

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

今天,它发明了一个游戏: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 步,直到无法删除更多数字。

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

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

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

1≤N,M≤300

−1 000 000 000≤Ai,Di≤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
 

 题解:

  设定dp[1][n]位最后答案

  每次去删除2个或者3个连续,或不连续的数

  暴力区间dp

  我是用dfs写的比较好理解

  下面大牛给出的一组数组是题目数据没有给到的,刚好hack了我的daima

  下面已经更新,就是注意删除三个数的时候必须枚举

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include<map>
  7. using namespace std;
  8. const int N = , M = , mod = 1e9 + , inf = 0x3f3f3f3f;
  9. typedef long long ll;
  10.  
  11. int dp[N][N];
  12. ll a[N],d;
  13. map<ll,int > mp;
  14. int dfs(int l,int r) {
  15. if(dp[l][r]!=-) return dp[l][r];
  16. int& ret = dp[l][r];
  17. ret = ;
  18. if(l>=r) return ret;
  19.  
  20. if(l+==r) {
  21. if(mp[a[r]-a[l]]) return (ret = );
  22. else return (ret = );
  23. }
  24.  
  25. int tmp = ;
  26. if(mp[a[r]-a[l]]) tmp+=;// cout<<a[r]-a[l]<<endl;
  27. if(dfs(l+,r-)==((r-)-(l+)+)) ret = tmp+((r-)-(l+)+);
  28. if(abs(a[r]-a[l])%==&&mp[(a[r]-a[l])/])
  29. for(int i=l+;i<r;i++) {
  30. tmp = ;
  31. if(a[r]-a[i]==a[i]-a[l]&&mp[a[i]-a[l]]) {
  32. tmp = ;
  33. }
  34. else continue;
  35. if(tmp+dfs(l+,i-)+dfs(i+,r-)==r-l+) {
  36. ret = r-l+;break;
  37. }
  38. }
  39.  
  40. for(int i=l+;i<r;i++) {
  41. ret = max(ret,dfs(l,i)+dfs(i+,r));
  42. }
  43. return ret;
  44. }
  45. int main() {
  46. int T,m,n;
  47. scanf("%d",&T);
  48. while(T--) {
  49. mp.clear();
  50. memset(dp,-,sizeof(dp));
  51. scanf("%d%d",&n,&m);
  52. for(int i=;i<=n;i++) scanf("%I64d",&a[i]);
  53. for(int i=;i<=m;i++) scanf("%I64d",&d),mp[d] = ;
  54. printf("%d\n",dfs(,n));
  55. }
  56. return ;
  57. }
  58.  
  59. /*
  60. 1
  61. 7 2
  62. 1 5 8 101 59 62 201
  63. 100 3
  64. */

2016"百度之星" - 初赛(Astar Round2A) 1004 D Game 区间DP的更多相关文章

  1. 2016百度之星-初赛(Astar Round2A)AII X

    Problem Description F(x,m) 代表一个全是由数字x组成的m位数字.请计算,以下式子是否成立: F(x,m) mod k ≡ c Input 第一行一个整数T,表示T组数据. 每 ...

  2. 2016"百度之星" - 初赛(Astar Round2B) 1006 中位数计数

    思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n //#pragma comment(lin ...

  3. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  5. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  6. 2016"百度之星" - 初赛(Astar Round2A)

    题目链接: http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=701 1001 : 矩阵快速幂 #include <iostre ...

  7. 2016"百度之星" - 初赛(Astar Round2A)Gym Class(拓扑排序)

    Gym Class  Accepts: 849  Submissions: 4247  Time Limit: 6000/1000 MS (Java/Others)  Memory Limit: 65 ...

  8. 2016"百度之星" - 初赛(Astar Round2A)All X(数学 矩阵)

    All X  Accepts: 1281  Submissions: 7580  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536 ...

  9. 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP

    Sitting in Line Problem Description   度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...

随机推荐

  1. UrlConnection连接和Socket连接的区别

    关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下: 抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节. urlconnection 基于H ...

  2. win7下virtualbox装linux共享win7文件问题(已测试可用)

    virtualbox这个比较强大,在win7上跑redhat5u4很流畅.os之间共享文件是个大家都很关心的问题,这会直接关系到虚拟机用的爽不爽. 在win7和其上的虚拟机linux之间共享文件也很容 ...

  3. HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表

    2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 ...

  4. 百度编辑器Ueditor 初始化加载内容失败解决办法

    项目上有用到百度文本编辑器ueditor,在页面加载的时候初始化编辑器内容时候,使用 $.document.ready(function() { UE.getEditor('editor').setC ...

  5. ASP.NET使用FileUpload上传文件

    前台代码: <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID=&q ...

  6. 小希的迷宫(MST单棵树判断法则)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDU 4911 http://acm.hdu.edu.cn/showproblem.php?pid=4911(线段树求逆序对)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 解题报告: 给出一个长度为n的序列,然后给出一个k,要你求最多做k次相邻的数字交换后,逆序数最少 ...

  8. The Flash

    flash.now[:error] = "" render :new flash[:error] = "" redirect videos_path http: ...

  9. 一段功能齐全的PHP常用重定向代码html+js+header

    /** * 重定向浏览器到指定的 URL * * @param string $url 要重定向的 url * @param int $delay 等待多少秒以后跳转 * @param bool $j ...

  10. Python网络编程(4)——异步编程select & epoll

    在SocketServer模块的学习中,我们了解了多线程和多进程简单Server的实现,使用多线程.多进程技术的服务端为每一个新的client连接创建一个新的进/线程,当client数量较多时,这种技 ...