LightOJ 1422 Halloween Costumes (区间DP)
来源:互联网 发布:手机数据为啥自动打开 编辑:程序博客网 时间:2024/06/04 18:49
题意:Gappu有N个聚会要去参加,每个聚会需要穿第ci件服装,每到一场聚会,Gappu可以在现在穿的衣服上再套上需要穿的服装,如果里层穿有需要的服装,也可以选择脱去外层的服装直到那件需要的,脱掉了的衣服不能再穿,问最后至少需要多少件服装。
思路:
设dp[i][j] 为区间i到j至少需要的服装数。
状态转移方程:
dp[i][j] = dp[i+1][j] + 1;
dp[i][j] = min(dp[i][j],dp[i+1][k] + dp[k+1][j]) (a[k] = a[i])
方程意义:k为第i个场合穿的服装穿在身上的最后的场合,所以在k+1往后便是重新算起,而k之前的服装数为dp[i+1][k]。
我的代码:
#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn = 105;const int INF = 0x3f3f3f3f;int n,a[maxn];int dp[maxn][maxn];int main(){ int cas; scanf("%d",&cas); for(int T = 1; T <= cas; T++){ scanf("%d",&n); for(int i = 0 ;i < n ; i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(int i = n - 1 ; i >= 0 ; i--){ for(int j = i ; j < n ; j++){ dp[i][j] = dp[i+1][j] + 1; for(int k = i + 1; k <= j ;k++) if(a[k] == a[i]) dp[i][j] = min(dp[i][j],dp[i+1][k] + dp[k+1][j]); } } printf("Case %d: %d\n",T,dp[0][n-1]); } return 0;}
0 0
- Lightoj 1422 Halloween Costumes(区间DP)
- LightOJ 1422 Halloween Costumes 区间DP
- LightOJ - 1422 Halloween Costumes (区间DP)
- LightOJ 1422 Halloween Costumes(区间dp)
- LightOJ 1422 Halloween Costumes(区间DP)
- LightOJ 1422 - Halloween Costumes(区间DP)
- 区间dp LightOj 1422 Halloween Costumes
- lightoj 1422Halloween Costumes(区间dp)
- LightOJ 1422 Halloween Costumes 【区间DP】
- LightOJ 1422 Halloween Costumes (区间dp)
- LightOJ 1422 Halloween Costumes (区间DP)
- lightoj-1422-Halloween Costumes 区间dp
- LightOJ - 1422 Halloween Costumes 区间DP
- LightOJ 1422 Halloween Costumes(区间DP )
- lightoj 1422 - Halloween Costumes 【区间dp入门】
- lightoj 1422 - Halloween Costumes(区间DP)
- LightOj 1422 Halloween Costumes(区间DP)
- LightOJ 1422 Halloween Costumes (区间DP)
- SinaStockInfo
- cocos2d-x游戏开发(十五)游戏加载动画loading界面
- 面向对象的内存分配
- JPA + Tomcat + JNDI数据源持久化配置
- Windows下让Apache与IIS共用80端口使支持ASP
- LightOJ 1422 Halloween Costumes (区间DP)
- 自已实现一个UI库-UI核心绘图层管理
- cocos2d-x游戏开发(十六)帧动画
- 智能储物柜/快递柜系统解析<一>
- Java高级个人笔记(java常用集合总结)
- UVA - 1153 Keep the Customer Satisfied
- Activity栈+单例模式
- coredata 小结
- 视差动画引导界面