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

题目大意:按顺序去参加舞会。每个舞会对衣服都有要求。可以连续穿好多件衣服。需要时候就脱下来,但是一旦脱下来,这件衣服就报废了。问最少需要几件衣服。

解题思路

很难想出这题是个区间DP。

DP边界:

dp[i][i]=1。也就是说每个舞会换件衣服。当然这个不是最优的。

对于dp[i][j]:

如果cos[i]=cos[j],dp[i][j]=dp[i][j-1],很明显i的衣服穿在最底,在j的时候就能拿出来再用了。这是第一步优化。

之后枚举中间点k,注意(i<=k<j)。

如果cos[i]=cos[k](这个条件可以去掉),那么k的衣服就是i的衣服了。那么dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])

注意这里是dp[i][k],而不是dp[i][k-1]。原因是不算k的ans包含在i~k区间里,而不是i~k-1的区间。

#include "cstdio"
#include "cstring"
#include "iostream"
using namespace std;
#define maxn 105
#define inf 0x3f3f3f3f
int cos[],dp[][];
int main()
{
//freopen("in.txt","r",stdin);
int T,n,no=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&cos[i]);
for(int i=;i<=n;i++) dp[i][i]=;
for(int p=;p<=n;p++)
{
for(int i=;i<=n;i++)
{
int j=i+p;
dp[i][j]=inf;
if(cos[i]==cos[j]) dp[i][j]=dp[i][j-];
for(int k=i;k<j;k++)
if(cos[i]==cos[k]) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]);
}
}
printf("Case %d: %d\n",++no,dp[][n]);
memset(dp,,sizeof(dp));
}
}

LightOJ 1422 (区间DP)的更多相关文章

  1. hdu 5693 && LightOj 1422 区间DP

    hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...

  2. LightOJ 1422 区间DP Halloween Costumes

    d(i, j)表示第i天到第j天至少要穿多少件衣服. 先不考虑第i天和后面 i+1 ~ j 天的联系,那就是至少要穿 1 + d(i+1, j)件衣服. 再看状态转移,如果后面第k(i+1 ≤ k ≤ ...

  3. lightoj 1033 区间dp

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

  4. lightoj 1031 区间dp

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

  5. lightoj 1025 区间dp

    #include<bits/stdc++.h> using namespace std; typedef long long ll; char a[70]; ll dp[70][70]; ...

  6. light oj 1422 区间dp

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...

  7. [kuangbin带你飞]专题二十二 区间DP

            ID Origin Title   17 / 60 Problem A ZOJ 3537 Cake   54 / 105 Problem B LightOJ 1422 Hallowee ...

  8. 区间DP LightOJ 1422 Halloween Costumes

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

  9. LightOJ 1422 Halloween Costumes 区间dp

    题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表i-j天最少要带的衣服 从后向前dp 区间从大到小 更新d ...

随机推荐

  1. (转)WPF控件开源资源

    (转)WPF控件开源资源 Textbox Drag/Drop in WPFhttp://www.codeproject.com/Articles/42696/Textbox-Drag-Drop-in- ...

  2. CVPR2015文章下载

    http://www.cv-foundation.org/openaccess/content_cvpr_2015/html/Liu_Real-Time_Part-Based_Visual_2015_ ...

  3. AspectJ报错:error at ::0 can't find referenced pointcut XXX

    今天在使用AspectJ进行注解切面时,遇到了一个错误. 切点表达式就是无法识别——详细报错信息如下: Exception in thread "main" org.springf ...

  4. python声明文件编码,必须在文件的第一行或第二行

    #coding=utf-8和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型 注意的两点: 1.声明必须在文件的第一行或第二行: 2.coding后面必须紧跟冒号或等号,#c ...

  5. 47. 数组中出现次数超过一半的数字[Number appears more than half times]

    [题目]:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. 例如长度为9的数组{1,2,3,2,2,2,5,4,2}中次数超过了数组长度的一半的数字为2,而长度为8的数组{1,2,3,2 ...

  6. Java for LeetCode 057 Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  7. codeforces B. Making Sequences is Fun 解题报告

    题目链接:http://codeforces.com/problemset/problem/373/B 题目意思:给出w,m和k,需要找出从m开始,可以有多少个连续的数(m+1,m+2,...)(在添 ...

  8. C标签判断两个值是否相等

    c标签判断两个值是否相等 Integer用:${user1.id eq user2.id}:int用:${user1.id == user2.id} 测试代码如下:<c:if test=&quo ...

  9. CSS“反转”为LESS

    LESS(官网在此:http://lesscss.net/)的魅力相信大家都已明了,个人认为它最大的魅力在于能够清晰的展现嵌套关系. 针对现有的项目,它的应用难点主要在于—— 何时转换为css,即是否 ...

  10. Android常用查询网站

    一.老罗的Android之旅爱生活,爱Android http://blog.csdn.net/luoshengyang 二.Android中文API http://www.android-doc.c ...