http://lightoj.com/volume_showproblem.php?problem=1422

题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉。问至少需要穿多少次衣服。

思路:开始学一下区间DP。学习资料

区间dp就是枚举区间的长度,然后在起点i到起点+长度j这段区间里面,用一个分割线分隔开,分为左右两边,然后通过左右两边的子问题去更新当前枚举的区间的结果。复杂度一般都为O(n^3)。

这里的题目就是一开始dp[i][i] = 1,代表初始的第i个派对需要穿1件衣服。

dp[i][j] = dp[i][k] + dp[k+1][j]。如果 wi == wj 的话,那么代表在起点穿该件衣服,终点可以脱掉之前的衣服用之前的衣服。所以答案需要-1。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define N 105
 4 #define INF 0x3f3f3f3f
 5 int w[N], dp[N][N];
 6 int main() {
 7     int t, cas = 0;
 8     scanf("%d", &t);
 9     while(t--) {
10         int n;
11         scanf("%d", &n);
12         memset(dp, INF, sizeof(dp));
13         for(int i = 1; i <= n; i++) scanf("%d", &w[i]), dp[i][i] = 1;
14         for(int len = 1; len < n; len++) {
15             for(int i = 1; i + len <= n; i++) {
16                 int j = i + len;
17                 for(int k = i; k < j; k++)
18                     if(dp[i][j] > dp[i][k] + dp[k+1][j]) dp[i][j] = dp[i][k] + dp[k+1][j];
19                 if(w[i] == w[j]) dp[i][j]--;
20             }
21         }
22         printf("Case %d: %d\n", ++cas, dp[1][n]);
23     }
24     return 0;
25 }

转载于:https://www.cnblogs.com/fightfordream/p/6445790.html

LightOJ 1422:Halloween Costumes(区间DP入门)相关推荐

  1. LightOJ 1422 Halloween Costumes

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

  2. 区间dp入门——总结+习题+解析

    前天学长拉了个区间dp的专题,花了两个做,今天就来做个总结吧!!! 区间dp其实就是一种建立在线性结构上的对区间的动态规划,dp本来就是很奇妙的东西,也没有什么套路,就是一种思考的数学思维方式,只有做 ...

  3. 石子归并 51Nod - 1021(区间DP入门题)

    N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有不少 ...

  4. 【DP_区间DP专辑】

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

  5. nyoj 304 节能 【区间dp】

    点击打开链接 节能 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关 ...

  6. LightOJ - 1422 (区间DP)

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

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

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

  8. [区间记忆化dp入门][Bribe the Prisoners SPOJ - GCJ1C09C][Codeforces Round #505D (rated, Div. 1 + Div. 2, ba]

    Bribe the Prisoners SPOJ - GCJ1C09C 作为这类题代表,f[i][j]代表第i点到第j点单独处理的最值 这题关键:释放某个囚犯后,就把囚犯分成两段,两段互相独立 这类d ...

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

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

最新文章

  1. seaborn系列 (15) | 双变量关系图jointplot()
  2. STM32_DMA 标准初始化设置解释
  3. MySQL Replication--复制异常1
  4. Java培训分享:8个优秀的Java编程技巧
  5. Linux下搭建asp.net运行环境
  6. spring-test dao空指针异常_014、Java异常机制
  7. 计算机网络(十五)-数据链路层-CSMA/CA协议
  8. 乐山市计算机学校太坑,乐山市计算机学校小规矩成就大素养
  9. nas存储如何做远程服务器数据备份_备份数据?7 个理由告诉你为什么要用 NAS,而不用移动硬盘...
  10. Linux的标准I/O和管道
  11. 16进制 ksh_AIX系统中如何统计进程打开的文件数目
  12. 【资源】福利来了!生物学相关常用软件小工具,百度云下载链接持续更新中...
  13. 华为鸿蒙系统真的好吗,鸿蒙系统真的成熟吗?华为还有很长的路要走
  14. apimodel 可以重复吗_Web API是否需要有ViewModels层类?
  15. redis 数据类型详解 以及 redis适用场景场合
  16. 学子商城项目用springboot后端框架搭建(IDEA)
  17. python实现的好玩的小程序--利用wxpy实现的微信可检测僵尸粉机器人
  18. 什么是大数据挖掘技术
  19. Web基础配置篇(四): Mysql的配置及使用
  20. 人脸识别考勤机选型验收标准

热门文章

  1. shell命令卸载mysql_centos8中的MySQL卸载和安装
  2. 原生js实现对象的深拷贝及循环引用
  3. 网络营销期间选用冷门关键词网络营销效果会好吗?
  4. 网站栏目该如何做SEO优化?
  5. mysql 快照读 幻读,InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读...
  6. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...
  7. 樊登读书赋能读后感_文化赋能,助力终端 | 第五届齐心办公节携手樊登读书点亮办公生活...
  8. 远程连接计算机用户名怎样修改,更改服务器远程桌面用户名
  9. android mp4流格式,将RTSP流保存到android中的mp4文件
  10. 线头尾两端各插入块lisp_如何在一条线段两端插入带角度得块?