LightOJ 1422 (区间DP)
题目链接: 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)的更多相关文章
- hdu 5693 && LightOj 1422 区间DP
hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...
- LightOJ 1422 区间DP Halloween Costumes
d(i, j)表示第i天到第j天至少要穿多少件衣服. 先不考虑第i天和后面 i+1 ~ j 天的联系,那就是至少要穿 1 + d(i+1, j)件衣服. 再看状态转移,如果后面第k(i+1 ≤ k ≤ ...
- lightoj 1033 区间dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1033 #include <cstdio> #include <cst ...
- lightoj 1031 区间dp
题目链接: http://lightoj.com/volume_showproblem.php?problem=1031 #include<cstdio> #include<cstr ...
- lightoj 1025 区间dp
#include<bits/stdc++.h> using namespace std; typedef long long ll; char a[70]; ll dp[70][70]; ...
- light oj 1422 区间dp
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...
- [kuangbin带你飞]专题二十二 区间DP
ID Origin Title 17 / 60 Problem A ZOJ 3537 Cake 54 / 105 Problem B LightOJ 1422 Hallowee ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- LightOJ 1422 Halloween Costumes 区间dp
题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表i-j天最少要带的衣服 从后向前dp 区间从大到小 更新d ...
随机推荐
- WPF 路由事件总结
1.什么是路由事件 已下为MSDN中的定义 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由 R ...
- Minimum Depth of Binary Tree
二叉树的最小深度 采用递归的方式求左右结点的高度,注意判断一个结点是否是叶子结点(左右子树都不存大). int minDepth(TreeNode *root) { return minDepth(r ...
- pip 直接安装tar.gz zip文件包 (windows linux mac 可用)
在不能连接外网的机器上安装python的各种包,解压安装要人工输入多条命令: tar -zxvf Flask-WTF-0.10.0.tar.gz cd Flask-WTF-0.10.0 python ...
- jquery 常用类别选择器
1.$('#showDiv'): id选择器,相当于javascript中的documentgetElementById("showDiv"); 2.$("onecla ...
- 61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k>=2)个数字呢?[find k missing numbers from 1 to n]
[本文链接] http://www.cnblogs.com/hellogiser/p/find-k-missing-numbers-from-1-to-n.html [题目] 从1到n,共有n个数字 ...
- coco2dx实现翻拍效果
昨天吃饭看见同事演示他做的翻牌效果,感觉不错,我心血来潮也来搞个,很简单直接上代码. class FlipCard : public CCNode { public: CREATE_FUNC(Flip ...
- Windows metro app wcf 地址可配置
在Windows metro app中调用wcf服务可以通过添加 “服务引用”来实现.一旦项目发布则不可修改.这个和桌面开发不一样. 现在我们通过读取文本的方式来读取wcf地址. 1.添加所需引用的w ...
- 2.python基础深入(元组、字符串、列表、字典)
一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
转载自:http://www.blogjava.net/rosen/archive/2010/05/21/321575.html 前言 在平时工作过程中,有时会遇到OutOfMemoryError,我 ...
- css3学习总结8--CSS3 3D转换
3D 转换 1. rotateX() 2. rotateY() otateX() 方法 通过 rotateX() 方法,元素围绕其 X 轴以给定的度数进行旋转. 示例: div { transform ...