UVALIVE 4857 Halloween Costumes (区间DP)
2014-12-16 16:32
387 查看
题目链接:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15381
题意:
有n个party,m种衣服,告诉你了这n个party需要穿的衣服,每次衣服脱了就不能再穿了。
问他最少需要多少套衣服。
分析:
我们想要衣服最少那么肯定要换的次数最少,就是使尽量多的场次穿一样的衣服,那么就类似这个问题了,求一个区间内有多少个括号匹配。
我们这个问题就是求区间内有多少种衣服相同
dp[i][j]表示i到j有多少种衣服相同
最后的衣服数等于n-dp[1]
.
如果第i个party 与第j个party所穿的衣服一样的话,那么dp[i][j]=max{dp[i][k]+dp[k+1][j]}+1;
否则dp[i][j]=max{dp[i][k]+dp[k+!][j]} (i<=k<j)
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 110;
int a[maxn];
int dp[maxn][maxn];
int main()
{
int n,m,t,cas=1;
scanf("%d",&t);
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 len=2;len<=n;len++){
for(int i=1;i+len<=n+1;i++){
int j = i+len-1;
for(int k=i;k<j;k++){
if(a[i]==a[j])
dp[i][j]=max(dp[i][k]+dp[k+1][j]+1,dp[i][j]);
else
dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i][j]);
}
}
}
printf("Case %d: %d\n",cas++,n-dp[1]
);
}
return 0;
}
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15381
题意:
有n个party,m种衣服,告诉你了这n个party需要穿的衣服,每次衣服脱了就不能再穿了。
问他最少需要多少套衣服。
分析:
我们想要衣服最少那么肯定要换的次数最少,就是使尽量多的场次穿一样的衣服,那么就类似这个问题了,求一个区间内有多少个括号匹配。
我们这个问题就是求区间内有多少种衣服相同
dp[i][j]表示i到j有多少种衣服相同
最后的衣服数等于n-dp[1]
.
如果第i个party 与第j个party所穿的衣服一样的话,那么dp[i][j]=max{dp[i][k]+dp[k+1][j]}+1;
否则dp[i][j]=max{dp[i][k]+dp[k+!][j]} (i<=k<j)
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 110;
int a[maxn];
int dp[maxn][maxn];
int main()
{
int n,m,t,cas=1;
scanf("%d",&t);
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 len=2;len<=n;len++){
for(int i=1;i+len<=n+1;i++){
int j = i+len-1;
for(int k=i;k<j;k++){
if(a[i]==a[j])
dp[i][j]=max(dp[i][k]+dp[k+1][j]+1,dp[i][j]);
else
dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i][j]);
}
}
}
printf("Case %d: %d\n",cas++,n-dp[1]
);
}
return 0;
}
相关文章推荐
- UVAlive 4857 - Halloween Costumes 区间dp
- UVALive 4857 Halloween Costumes(区间DP)
- UVALIVE4394,区间DP好题
- UVALive 3363 String Compression (区间DP,4级)
- UVALive 3363 String Compression (区间DP,4级)
- UVALive 6529 Eleven 区间dp
- uva live 4394 String painter 区间dp
- UVALive 6529 Eleven 区间dp
- uva live 3516 Exploring Pyramids 区间DP
- HDU 2476 | UVALive 4394 - String painter (区间DP)
- uvalive 6938 区间dp
- UVAlive 7061 Dire Wolf (区间DP)
- Wooden Signs uvalive gym 区间dp
- uvalive4394(区间dp)
- UVALive - 3363 String Compression 区间DP
- UVALive 5695 -The Last Puzzle -区间dp
- uvalive 3363(区间dp)
- UVA Live Archive 4394 String painter(区间dp)
- UVALive 4987---Evacuation Plan(区间DP)
- 【区间dp】【记忆化搜索】UVALive - 3516 - Exploring Pyramids