d(i, j)表示第i天到第j天至少要穿多少件衣服。

先不考虑第i天和后面 i+1 ~ j 天的联系,那就是至少要穿 1 + d(i+1, j)件衣服。

再看状态转移,如果后面第k(i+1 ≤ k ≤ j)天所穿的衣服和第i天一样的话,那么完全可以把第i+1~k-1天所穿的衣服脱下来。

所以状态转移方程就是d(i, j) = min{ d(i+1, k-1) + d(k, j) | a[i] == a[k] },这里不用加1,因为第i天穿的那件衣服,已经包含在d(k, j)中了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 const int maxn = 100 + 10;
 7
 8 int n;
 9 int a[maxn];
10 int d[maxn][maxn];
11
12 int main()
13 {
14     int T; scanf("%d", &T);
15     for(int kase = 1; kase <= T; kase++)
16     {
17         scanf("%d", &n);
18         for(int i = 0; i < n; i++) scanf("%d", a + i);
19         memset(d, 0, sizeof(d));
20         for(int i = 0; i < n; i++)
21             for(int j = i; j < n; j++)
22                 d[i][j] = j - i + 1;
23         for(int i = n - 2; i >= 0; i--)
24             for(int j = i + 1; j < n; j++)
25             {
26                 d[i][j] = d[i + 1][j] + 1;
27                 for(int k = i + 1; k <= j; k++) if(a[i] == a[k])
28                     d[i][j] = min(d[i][j], d[i+1][k-1] + d[k][j]);
29             }
30         printf("Case %d: %d\n", kase, d[0][n - 1]);
31     }
32
33     return 0;
34 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4695738.html

LightOJ 1422 区间DP Halloween Costumes相关推荐

  1. LightOJ - 1422 区间DP

    题目链接 https://vjudge.net/problem/LightOJ-1422 题意 不同舞会穿不同衣服.可以随时按栈的方式穿脱.同一件衣服脱了不能重复利用,任何时候都可以穿多件衣服.问最小 ...

  2. lightoj 1031 区间dp

    题目链接: http://lightoj.com/volume_showproblem.php?problem=1031 #include<cstdio> #include<cstr ...

  3. LightOJ 1422:Halloween Costumes(区间DP入门)

    http://lightoj.com/volume_showproblem.php?problem=1422 题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉 ...

  4. LightOJ 1422 Halloween Costumes

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27130 ---------------------------- ...

  5. LightOJ - 1422 (区间DP)

    题意:有t组数据,对于每组,有n个聚会需要参加,下面依次是参加各个聚会需要的衣服编号,要求所需要的衣服一定穿在外面,在操作的时候,可以选择穿上一件衣服或脱下一件衣服,脱下的衣服不能继续使用,问最少需要 ...

  6. lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...

  7. Brackets POJ - 2955 (区间DP+最大括号匹配子序列)

    传送门 题目:给一个长度n(<=100)的只包含'[',']','(',)'的字符串,求最长的完全匹配的子序列.输出长度 题解:区间dp,dp[i][j]表示i~j的最长匹配数,一支dp[i][ ...

  8. 【DP_区间DP专辑】

    区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维.然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右 ...

  9. 动态规划 —— 区间 DP

    [概述] 区间型动态规划,又称为合并类动态规划,是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的区间中哪些元素合并而来有很大的关系. [思想] 区间 DP 实质上就是 ...

最新文章

  1. (转)一个古老的编程游戏:Python Challenge全通攻略
  2. 处理JSON格式的数据
  3. P2668 斗地主 dp+深搜版
  4. 计算机控制的工频机是什么,UPS 如何分类,工频机和高频机区别是什么?
  5. java 无侵入监控_MyPerf4J 一个高性能、无侵入的Java性能监控和统计工具
  6. 我的内核学习笔记5:proc目录文件创建及读写
  7. react native ScrollView
  8. IDEA的热部署配置
  9. HDU1875 畅通工程再续【Kruskal算法+并查集】
  10. 使用纯CSS实现圣诞节雪花图案
  11. _cdecl与_stdcall的区别
  12. 微信小程序生成二维码方法接口集合
  13. 常规WebRoot项目在Idea中通过tomcat运行
  14. [转载]推荐两篇文章
  15. 插上移动硬盘计算机没反应,usb硬盘插上电脑没反应怎么办,手把手教你怎么解决...
  16. 触屏手机关闭开机触屏校准
  17. 计算机进去bios方式,电脑的BIOS在哪?各电脑进入BIOS的方法
  18. 大疆精灵4多光谱无人机P4M影像辐射定标方法(三)
  19. 配电房环境智能监测系统及轨道巡检机器人
  20. Cisco VTP配置

热门文章

  1. Taro+react开发(21)--注意参数格式
  2. [html] 用一个div模拟textarea的实现
  3. [vue] vue自定义事件中父组件怎么接收子组件的多个参数?
  4. [css] CSS中的calc()有什么作用?
  5. [js] js的循环结构有哪些?
  6. 工作189:配置表头即可
  7. 工作109:路由菜单项
  8. 前端学习(2485):vue里面的this指向
  9. 前端学习(1305):项目依赖
  10. 前端学习(14):相对路径和绝对路径