转自:http://www.cnblogs.com/qscqesze/p/5516294.html

分析:我写区间dp,都是拘泥于形式,随便更新(实在是太弱了)

但是其实我们如果思考清楚区间dp基于什么进行转移,转移就更加清晰

看了电子科技大学的巨巨的博客以后,豁然开朗,就是一个很简单的O(n^3)转移

我们要搞清楚他是根据什么进行转移

我发现在进行dp时,往往根据区间第一个元素的归属进行分类讨论转移

而这个题也是一样,我么依旧考虑第一个元素的归属,但是还有3个的情况

注意一下特判3个的就好了(注意判3个的时候,不需要n4枚举,只需要和最右边那个店组成3个就好,因为小的已经被枚举过),分类讨论就好了

#include <cstdio>
#include <iostream>
#include <ctime>
#include <vector>
#include <cmath>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=3e2+5;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
bool mark[N][N];
int a[N],dp[N][N],n,m,T;
int main(){scanf("%d",&T);while(T--){memset(mark,false,sizeof(mark));memset(dp,0,sizeof(dp));scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)scanf("%d",&a[i]);for(int i=1;i<=m;++i){int x;scanf("%d",&x);for(int j=1;j<n;++j)for(int k=j+1;k<=n;++k)if(a[k]-a[j]==x)mark[j][k]=true;}for(int len=1;len<=n;++len){for(int l=1;l<=n;++l){int r=l+len;if(r>n)break;if(mark[l][r]&&dp[l+1][r-1]==(r-l-1))dp[l][r]=max(dp[l][r],dp[l+1][r-1]+2);for(int i=l;i<r;++i)dp[l][r]=max(dp[l][r],dp[l][i]+dp[i+1][r]);for(int i=l+1;i<r;++i){if(mark[l][i]&&mark[i][r]&&a[i]-a[l]==a[r]-a[i]&&dp[l+1][i-1]==(i-1-l)&&dp[i+1][r-1]==(r-i-1))dp[l][r]=max(dp[l][r],r-l+1);}}}printf("%d\n",dp[1][n]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/shuguangzw/p/5618904.html

HDU 5693 D Game 区间dp相关推荐

  1. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

  2. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  3. HDU 5115 Dire Wolf (区间DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题意:很多狼排成一排,每只狼有一个攻击值a[i]和附加攻击值b[i].当你消灭一只狼时,你会受到 ...

  4. hdu 4597 Play Game(区间dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:  hdu-4597 题意 Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个     ...

  5. HDU 4745 Two Rabbits(区间dp)

    这道题相对来说,我觉得就有点考查读题了 读题时一定要细心,大致就是要你求一个回文子序列,递推方程很简单 if(a[i]==a[j]) g[i][j]=max(g[i][j],g[i+1][j-1]+2 ...

  6. HDU 5693:D Game(区间DP)

    D Game Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  7. HDU 2476 String painter (区间DP)

    题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...

  8. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

  9. hdu 5151 Sit sit sit(区间dp+排列组合)

    题目链接:hdu 5151 Sit sit sit 题意: 一共有并排N个椅子, N个学生依次去坐,同时满足3个条件就不能坐下去: 1,该椅子不在最左,不在最右. 2,该椅子左右都有人坐了. 3,左右 ...

最新文章

  1. Linux C中strcpy , strncpy , strlcpy 的区别
  2. 电脑图片不显示缩略图怎么办
  3. Django之初步实现登录功能,APP及ORM
  4. IOCP之accept、AcceptEx、WSAAccept的区别
  5. 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)
  6. buf.indexOf()
  7. vue computed 传参_前端面试时面试官想要听到什么答案(关于一些Vue的问题)
  8. 阿里云ACP认证之云服务器ECS知识整理(考题占比 31%)
  9. 招聘简历管理系统的简单设计
  10. 边际效用价值论:从钻石和水的悖论谈起
  11. python—you-get下载工具、wget下载工具
  12. 为什么极品飞车服务器维修,极品飞车:无极限赛车无法连接服务器是什么原因...
  13. 成都2019年大庙会“小喜神”新鲜出炉
  14. 支持右翼教科书的日本企业与个人全部名单
  15. 203、商城业务-商品详情-环境搭建
  16. 读《活在网络里 大升级时代的人类新进化》
  17. 详述 Java NIO 以及 Socket 处理粘包和断包方法
  18. 决策树,基尼系数,泰勒级数
  19. Python安装(3.8、3.9, 3.10)、Python的VS Code配置
  20. deepin 安装navcat14

热门文章

  1. java synchronized 参数_个人对synchronized锁的参数理解,如果有误望指出
  2. php编译html,将PHP模板文件编译为静态HTML页面的Ant任务
  3. #串口通信超时处理_实现4G无线通信透传的远程通信多组网5个PLC相互交换数据...
  4. 【以太坊】搭建测试网络之ubuntu系统安装golang环境以及helloworld
  5. react native 开发笔记(一)
  6. 【响应式Web前端设计】css如何设置边框的圆角样式?border-radius属性设置圆角样式(图 文)
  7. 【深度学习入门到精通系列】图片OCR讲解
  8. 【Network Security!】搭建文件分享服务器,其实也可以很简单-HFS
  9. WindowsServer和普通WIN操作系统有什么不同?
  10. Python程序设计题解【蓝桥杯官网题库】 DAY2-IDLE与基础练习