http://lightoj.com/volume_showproblem.php?problem=1422

题意:去参加派对,有n场派对,每场派对要穿第wi种衣服,可以选择外面套一件,也可以选择脱掉。问至少需要穿多少次衣服。

思路:开始学一下区间DP。学习资料

区间dp就是枚举区间的长度,然后在起点i到起点+长度j这段区间里面,用一个分割线分隔开,分为左右两边,然后通过左右两边的子问题去更新当前枚举的区间的结果。复杂度一般都为O(n^3)。

这里的题目就是一开始dp[i][i] = 1,代表初始的第i个派对需要穿1件衣服。

dp[i][j] = dp[i][k] + dp[k+1][j]。如果 wi == wj 的话,那么代表在起点穿该件衣服,终点可以脱掉之前的衣服用之前的衣服。所以答案需要-1。

 #include <bits/stdc++.h>
using namespace std;
#define N 105
#define INF 0x3f3f3f3f
int w[N], dp[N][N];
int main() {
int t, cas = ;
scanf("%d", &t);
while(t--) {
int n;
scanf("%d", &n);
memset(dp, INF, sizeof(dp));
for(int i = ; i <= n; i++) scanf("%d", &w[i]), dp[i][i] = ;
for(int len = ; len < n; len++) {
for(int i = ; i + len <= n; i++) {
int j = i + len;
for(int k = i; k < j; k++)
if(dp[i][j] > dp[i][k] + dp[k+][j]) dp[i][j] = dp[i][k] + dp[k+][j];
if(w[i] == w[j]) dp[i][j]--;
}
}
printf("Case %d: %d\n", ++cas, dp[][n]);
}
return ;
}

最新文章

  1. 使用CTex完成北京科技大学本科生毕业设计
  2. 【C++】运算符重载
  3. SVM 支持向量机
  4. shell中的双引号,单引号,反引号
  5. C语言中可变参数的用法
  6. Android SDK代理服务器解决国内不能更新下载问题(转)
  7. Android之PendingIntent的深入理解
  8. pyrhon多进程操作初探
  9. helm 持久化部署ingres
  10. Linux 内核参数 arp_ignore &amp; arp_announce 详解
  11. 搭建 RabbitMQ Server 高可用集群【转】
  12. RMQ(Range MinimumQuery)问题之ST算法
  13. Android中的EventBus
  14. root密码重置(Centos 7)
  15. Mysql安装错误:Install/Remove of the Service Denied!解决办法
  16. 简单的user-based协同过滤算法示例代码
  17. 超强、超详细Redis入门教程【转】
  18. Notes of Daily Scrum Meeting(11.12)
  19. H5商城,纯前端静态页面
  20. Algorithm——无重复字符的最长子串

热门文章

  1. Nucleus PLUS系统架构和组件
  2. VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)
  3. WPF 特殊符号 字符绑定
  4. 关于XML异步
  5. hMailServer搭建简单邮件系统
  6. .Net Random产生随机数
  7. Delphi在系统菜单中添加菜单项
  8. MotionManager 陀螺仪实现方式
  9. SYN5006型电机同步编码脉冲分配器
  10. 分享android ADT百度云盘下载地址