对于这一题想了很久真的是一点头绪也没有,还有组数明明是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]是已经求出来的

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; int dp[N][N],a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int t,cnt=;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
memset(dp,,sizeof dp);
for(int i=;i<=n;i++)dp[i][i]=;
for(int i=n-;i>=;i--)
{
for(int j=i+;j<=n;j++)
{
dp[i][j]=dp[i+][j]+;
for(int k=i+;k<=j;k++)
{
if(a[i]==a[k])
dp[i][j]=min(dp[i][j],dp[i+][k-]+dp[k][j]);
}
}
}
cout<<"Case "<<++cnt<<": "<<dp[][n]<<endl;
}
return ;
}
/********************
1 2 1 2
dp[1][3]=min(dp[1][3],dp[1][2]+dp[2][3]);
********************/

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. RemoveDuplicatesfromSortedArray

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  2. Oracle学习笔记—connect、resource和dba三种权限(转载)

    转载自: connect.resource和dba三种标准角色: 授权语句: grant connect ,resource,dba to user with admin option; (注意:其中 ...

  3. tomcat8.5.11的manager页面总是提示403的问题

    修改conf/tomcat-users.xml加入: <role rolename="manager"/> <role rolename="manage ...

  4. java中byte数组与int,long,short间的转换

    http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * <l ...

  5. TOGAF和BABOK

  6. redis 数据导入导出,实例内db迁移

    源实例db0迁移至目标实例db1 [root@172.20.0.1 ~]# cat redis_mv.sh #!/bin/bash redis-cli -h -a password -n keys & ...

  7. iOS应用网络安全之HTTPS

    移动互联网开发中iOS应用的网络安全问题往往被大部分开发者忽略,iOS9和OS X 10.11开始Apple也默认提高了安全配置和要求.本文以iOS平台App开发中对后台数据接口的安全通信进行解析和加 ...

  8. INSPIRED启示录 读书笔记 - 第2章 产品管理与产品营销

    两者不是一回事 1.产品经理的工作是从细节上定义开发团队开发什么产品 2.市场营销的职责是对外宣传产品 产品公司常常会陷入的三种误区 1.由市场营销人员定义产品:由产品营销经理或所谓的产品经理负责收集 ...

  9. 让FireFox支持 window.event 全局事件对象

    这里比原文稍加改进,让FF也支持 event.srcElement了, 省得每次写兼容代码挺麻烦的: //For firefox window.event if(typeof(window.event ...

  10. oracle修改密码和设置密码有效期

    一.修改密码1)修改密码 sql>alter user user01 identified by password; 2)修改密码并unlock sql>alter user user01 ...