对于这一题想了很久真的是一点头绪也没有,还有组数明明是200,数据范围100,O(n^3)的复杂度居然不会爆掉(可能是因为一直在想怎么用O(n^2)的复杂度做这题

做法是先预处理dp,对于dp[i][i]只能等于1,因为dp数组代表i到j的最小带的衣服数量,从下至上更新

对于每一次的dp[i][j],可以通过dp[i+1][j]+1转移过来,这是每次都穿新衣服的最大情况,既然要求最小穿戴数,那么必须就找一找从i+1到j的所有情况中,有没有和i穿的衣服是一样的(这样就可以不穿第i件)

如果有,那么只要脱下第i+1到第k-1件衣服就好了,这样就有dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k][j]),dp[k][j]就是一开始没有穿任何衣服,然后从第k件开始穿直到第j件的最小件数

通过这题感觉区间dp的思想应该就是从两段并没有联系的连续区间转移到他们的区间和,这道题上体现的尤为明显,因为过程是先从第i+1件到第k-1件依次穿上,然后脱掉这一过程穿的所有衣服,(因为这时第i件和第k件相同),再继续进行后续的穿衣

至于为什么这题是从后往前呢,是因为对于每次的转移过程,必须保证dp[i+1][k-1]和dp[k][j]是已经求出来的

  1. #include<bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define mp make_pair
  5. #define pb push_back
  6. #define pii pair<int,int>
  7. #define C 0.5772156649
  8. #define pi acos(-1.0)
  9. #define ll long long
  10. #define mod 1000000007
  11. #define ls l,m,rt<<1
  12. #define rs m+1,r,rt<<1|1
  13.  
  14. using namespace std;
  15.  
  16. const double g=10.0,eps=1e-;
  17. const int N=+,maxn=+,inf=0x3f3f3f;
  18.  
  19. int dp[N][N],a[N];
  20. int main()
  21. {
  22. ios::sync_with_stdio(false);
  23. cin.tie();
  24. int t,cnt=;
  25. cin>>t;
  26. while(t--)
  27. {
  28. int n;
  29. cin>>n;
  30. for(int i=;i<=n;i++)cin>>a[i];
  31. memset(dp,,sizeof dp);
  32. for(int i=;i<=n;i++)dp[i][i]=;
  33. for(int i=n-;i>=;i--)
  34. {
  35. for(int j=i+;j<=n;j++)
  36. {
  37. dp[i][j]=dp[i+][j]+;
  38. for(int k=i+;k<=j;k++)
  39. {
  40. if(a[i]==a[k])
  41. dp[i][j]=min(dp[i][j],dp[i+][k-]+dp[k][j]);
  42. }
  43. }
  44. }
  45. cout<<"Case "<<++cnt<<": "<<dp[][n]<<endl;
  46. }
  47. return ;
  48. }
  49. /********************
  50. 1 2 1 2
  51. dp[1][3]=min(dp[1][3],dp[1][2]+dp[2][3]);
  52. ********************/

lightoj1422 区间dp的更多相关文章

  1. LightOJ1422 Halloween Costumes(区间DP)

    题目大概是依次有n场派对,每场派对都有需要穿某套衣服去参加,可以同时穿多套衣服,就是一套套着一套,如果脱了的话就不能再穿上那套了,问最少需要几套衣服去参加完所有派对. 区间DP: dp[i][j]第i ...

  2. LightOJ - 1422 Halloween Costumes —— 区间DP

    题目链接:https://vjudge.net/problem/LightOJ-1422 1422 - Halloween Costumes    PDF (English) Statistics F ...

  3. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  4. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  5. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  6. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  7. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  8. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  9. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

随机推荐

  1. PAT 1072. 开学寄语(20) JAVA

    下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其QQ,封其电脑,夺其手机,收其ipad,断其wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟.精进 ...

  2. 剑指offer 面试8题

    面试8题: 题目:二叉树的下一个节点 题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路:详见剑 ...

  3. 小程序 height100% Android ios上的不同表现

    Android还是按原图显示 ios,会完全覆盖

  4. PAT 天梯赛 L1-043. 阅览室 【STL】

    题目链接 https://www.patest.cn/contests/gplt/L1-043 思路 将每一次 借出和归还 都用 MAP 标记 如果归还的时候 已经被标记过了 那么 ANS ++ 并且 ...

  5. Python学习进程(2)Python环境的搭建

        本节主要介绍在windows和Linux平台上如何搭建Python编程环境.     (1)查看Python版本: windows: C:\Users\JMSun>python 'pyt ...

  6. Ag-grid控件使用pine:left后,配合iview下拉框,会出现闪烁

    Ag-grid控件使用pinned:left后,配合iview下拉框,会出现闪烁 引起原因:下拉图标的反转动画 目前解决方案: 添加一个全局样式: 禁用动画,其他地方也是如此, 影响控件有:gz-tr ...

  7. CMA内存管理子系统

    转:http://www.wowotech.net/memory_management/cma.html 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. ...

  8. 使用jsp+javabean完成用户登陆功能

    User.java package com.po; public class User implements java.io.Serializable { private String usernam ...

  9. Docker容器技术-创建一个简单的Web应用

    一.创建一个简单的Web应用 1.identicon 基于某个值而自动产生的图像,这个值是IP地址或用户名的散列值. 用途: 通过计算用户名或IP地址的散列值,在网站上提供用于识别用户的图像,以及自动 ...

  10. Python编程-数据类型方法

    一.进制简介 进制也就是进位制,是人们规定的一种进位方法.对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位.十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x ...