lightoj1422 区间dp
对于这一题想了很久真的是一点头绪也没有,还有组数明明是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的更多相关文章
- LightOJ1422 Halloween Costumes(区间DP)
题目大概是依次有n场派对,每场派对都有需要穿某套衣服去参加,可以同时穿多套衣服,就是一套套着一套,如果脱了的话就不能再穿上那套了,问最少需要几套衣服去参加完所有派对. 区间DP: dp[i][j]第i ...
- LightOJ - 1422 Halloween Costumes —— 区间DP
题目链接:https://vjudge.net/problem/LightOJ-1422 1422 - Halloween Costumes PDF (English) Statistics F ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- poj2955 Brackets (区间dp)
题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...
- HDU5900 QSC and Master(区间DP + 最小费用最大流)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
- 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 ...
随机推荐
- MySQL事件的先后
今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...
- Docker介绍及优缺点对比分析
1.什么是Docker Docker最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,于2013年3月以Apache 2.0授权协议开源,主要项目代码在Git ...
- centos6.9下安装composer
1.下载composer curl -sS https://getcomposer.org/installer | php ps:如果出现php无法运行的情况,请先把PHP加入环境变量 2.移动或复制 ...
- LeetCode::Sort List 具体分析
Sort a linked list in O(n log n) time using constant space complexity. 这道题目非常简短的一句话.给链表排序,看到nlogn.我们 ...
- Django of python 中文文档 及debug tool
http://python.usyiyi.cn/django/index.html http://www.ziqiangxuetang.com/django/django-views-urls.htm ...
- Python基础-文件的基本操作
测试文件fansik内容如下:This is line 1This is line 2This is line 3This is line 4This is line 5This is line 6 ...
- php备份mysql数据库
<?php /*程序功能:mysql数据库备份功能*/ ini_set('max_execution_time','0'); ini_set('memory_limit','1024M');// ...
- WEB网页专业词汇 汇总
Accessibility 可访问性 accessor properties 存取器属性 addition 加法 aggregate 聚合 alphabetical order 字母表顺序 Anch ...
- $GitHub边用边总结
以下用法是在ubuntu系统下的用法,主要内容整理自'廖雪峰的官方网站'. #1.安装git$ sudo apt-get install git #2.声明git账号$ git config --gl ...
- indy10 UDP实例
UDP就比较简单了,放个按钮,一个TIdUDPServerTIdUDPServer绑定 0.0.0.0:3820,然后Active设置为True //发送按钮procedure TForm1.Butt ...