light oj 1422 区间dp

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <climits>
 8 #include <queue>
 9 #define ll long long
10
11 using namespace std;
12
13 int color[105],n;
14 int dp[105][105];
15
16 int dfs(int l,int r)
17 {
18     if(r < l) return 0;
19     if(dp[l][r] != -1)
20         return dp[l][r];
21     if(l == r)
22         return dp[l][r] = 1;
23     dp[l][r] = r-l+1;
24
25     dp[l][r] = min(dfs(l+1,r)+1,dp[l][r]); //新穿一件
26
27     for(int i = l+1; i <= r; i++)
28     {
29         if(color[l] == color[i])
30             dp[l][r] = min(dp[l][r],dfs(l+1,i-1)+dfs(i,r)); //l == i 不用新穿
31     }
32     return dp[l][r];
33 }
34
35 void solve()
36 {
37     scanf("%d",&n);
38     memset(dp,-1,sizeof(dp));
39     for(int i = 1; i <= n; i++)
40         scanf("%d",&color[i]);
41     int ans = dfs(1,n);
42
43     printf("%d\n",ans);
44 }
45
46 int  main(void)
47 {
48
49     int t,cnt = 0;
50     scanf("%d",&t);
51     while(t--)
52     {
53         printf("Case %d: ",++cnt);
54         solve();
55     }
56     return 0;
57 }
时间: 2024-10-11 12:04:39

light oj 1422 区间dp的相关文章

light oj 1422 - Halloween Costumes (区间dp)

1422 - Halloween Costumes PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is planning to attend as many parties as he can. Since it's Ha

hdu 5693 &amp;&amp; LightOj 1422 区间DP

hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3组合成. 区间DP,用dp[i][j]表示在i到j之间可以删除的最大数,枚举区间长度,再考虑区间两端是否满足等差数列(这是考虑两个数的),再i到j之间枚举k,分别判断左端点右端点和k是否构成等差数列(还是考虑两个数的),判断左端点,k,右端点是否构成等差数列(这是老驴三个数的) 1 #include

Light OJ 1422 Halloween Costumes 区间DP基础题

Halloween Costumes 题目链接: http://lightoj.com/volume_showproblem.php?problem=1422 题意: Gappu想要去参加一些party,他去每个party都要把特定编号的服装穿在外边,他可以穿上或者脱掉服装(脱掉的服装不能再穿一次,但是可以穿一件相同编号新的服装,最近穿的服装会套在之前穿的服装的外边),问Gappu最少需要准备多少套服装. 题解: 设dp[i][j]为区间 i 到 j (设len为区间长度,j=i+len)内最少

Light OJ 1422 - Halloween Costumes(区间DP 最少穿几件)

http://www.cnblogs.com/kuangbin/archive/2013/04/29/3051392.html http://www.cnblogs.com/ziyi--caolu/archive/2013/08/01/3229668.html http://www.cfanz.cn/index.php?c=article&a=read&id=172173 #include <iostream> #include <string> #include

Light oj 1422 - Halloween Costumes

题目:http://lightoj.com/volume_showproblem.php?problem=1422 #include <cstdio> #include <iostream> using namespace std; int c[105]; int dp[105][105]; int main () { int T, N; scanf("%d", &T); for(int kase=1; kase<=T; kase++) { sca

LightOJ 1422 区间dp

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27130 万圣节来了,Gappu 需要挨个参加 N 个聚会,聚会需要装扮成一些类似于 Superman 一样的角色,Gappu 需要准备足够的衣服,他可以在一件衣服外面套一件一份,如果之后他需要用到穿在里面的衣服就可以脱去外面的衣服,但 Gappu 有洁癖,对于脱去的衣服,他不再想穿了,问你 Gappu 最多需要准备多少件衣服. 对于区间(l, r) <!--第l个聚会到第r

light oj 1084 线性dp

1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <queue> 6 #define ll long long 7 8 using namespace std; 9 const int N = 1e5+1000; 10 11 int a[N],dp[N]; 12 13 void solve() 14 {

light oj 1068 数位dp

1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream> 6 #include <algorithm> 7 #include <climits> 8 #include <queue> 9 #define ll long long 10 11 using na

light oj 1031(数位DP)

求一段区间中,每个十进制数所对应的二进制数中连续的1的个数之和. 设dp[i][0]代表长度为i的二进制数,首位为0,所含有的连续的1的个数之和. dp[i][1]代表长度为i的二进制数,首位为1,所含有的连续的1的个数之和. a: d[i][1]=d[i-1][0]+d[i-1][1]+(1<<(i-2)); b: d[i][0]=d[i-1][0]+d[i-1][1]; 这里面有一个需要注意的地方是,假设有一个数字是111,那么它含有2个连续的1,具体体现在 方程上是分两次计算的,一个是a