UVALive 4857 Halloween Costumes(区间DP)
2015-10-05 22:56
555 查看
题意:某人一晚上要参加n个聚会,每场聚会都要穿对应的衣服,在参加下一场聚会之前,他可以选择穿上下一场聚会对应的衣服,也可以选择由外向里脱衣服,直到露出下一场聚会对应的衣服。规定脱下的衣服不能再穿,也就是说,若在脱下2号衣服之后的某一场聚会需要穿上2号衣服,不能穿之前脱下的,只能拿一件新的。求他在所有聚会开始前,至少需要准备几件衣服。
分析:这种类似贪心、要求最优情况的题,习惯性想到DP。状态转移方程也不难想。dp[i][j]表示,第i场聚会到第j场聚会至少需要的衣服数量,初始化为0,dp[i][i]初始化为1,因为单独那一场聚会自然只需要一件衣服。
dp[i][j] = dp[i][j - 1] + 1,这个很好理解,先默认在参加第j - 1场聚会后选择穿上一件衣服去参加第j场聚会。
而当第i场聚会到第j - 1场聚会之间的第k场聚会要穿的衣服与第j场聚会对应的衣服相同时,他可以在第k场聚会后选择不脱,等到第j - 1场聚会之后把新穿上的衣服都脱掉,露出这一件。
所以,状态转移方程就是dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j - 1])。
这也是一道挺简单的区间DP题吧。
分析:这种类似贪心、要求最优情况的题,习惯性想到DP。状态转移方程也不难想。dp[i][j]表示,第i场聚会到第j场聚会至少需要的衣服数量,初始化为0,dp[i][i]初始化为1,因为单独那一场聚会自然只需要一件衣服。
dp[i][j] = dp[i][j - 1] + 1,这个很好理解,先默认在参加第j - 1场聚会后选择穿上一件衣服去参加第j场聚会。
而当第i场聚会到第j - 1场聚会之间的第k场聚会要穿的衣服与第j场聚会对应的衣服相同时,他可以在第k场聚会后选择不脱,等到第j - 1场聚会之后把新穿上的衣服都脱掉,露出这一件。
所以,状态转移方程就是dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j - 1])。
这也是一道挺简单的区间DP题吧。
#include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <cstring> #define maxn 110 using namespace std; int a[maxn], dp[maxn][maxn]; int main() { int t; int n, m, cnt; scanf("%d", &t); cnt = 1; while(t--) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); } memset(dp, 0, sizeof(dp)); for(int i = 1; i <= n; i++) dp[i][i]=1; for(int j = 2; j <= n; j++) { for(int i = 1; i < j; i++) { dp[i][j] = dp[i][j - 1] + 1; for(int k = i; k < j; k++) { if(a[k] == a[j]) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j - 1]); } } } printf("Case %d: %d\n",cnt++, dp[1] ); } }
相关文章推荐
- POJ 1159
- 区间DP poj 2955 hdu 2476
- HDU 1028(Ignatius and the Princess III)区间DP之整数划分
- Brackets Sequence
- UVALive 4394 String painter
- hdu 4745 Two Rabbits
- ZOJ 3541 The Last Puzzle
- Code Jam 2009 Round1C Problem C. Bribe the Prisoners —— 区间DP
- UVA 10003 —— 区间DP
- POJ 3042 Grazing on the Run (区间DP)
- UVA 10003 Cutting Sticks(区间dp)
- SPOJ - GCJ1C09C Bribe the Prisoners
- NYOJ15 - UVA1626 括号匹配问题(区间dp)
- wikioi 1154 - 能量项链 (环形区间dp)
- POJ 1651 - Multiplication Puzzle(区间DP,矩阵链乘三种模版详解)
- SMU 1106 - 凸多边形的最优三角剖分问题(区间DP)
- wikioi1085 - 数字游戏(区间DP或者划分DP)
- POJ 1179 Polygon 区间DP
- NYOJ 括号匹配(二) 区间DP
- HDU1513:Palindrome