题目传送门

直接暴力定义f[x1][y1][x2][y2]是使对角为\((x1, y1),(x2, y2)\)这个子矩形满足要求的最短切割线长度

因为转移顺序不好递推,采用记忆化搜索

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
LL read() {LL k = 0, f = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9')k = k * 10 + c - 48, c = getchar();return k * f;
}
int f[21][21][21][21], sum[21][21];
bool mapp[21][21];
int dp(int x1, int y1, int x2, int y2) {int num = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1];if(num == 1) return f[x1][y1][x2][y2] = 0;if(num == 0) return f[x1][y1][x2][y2] = 2147483647 / 3;if(f[x1][y1][x2][y2] != -1) return f[x1][y1][x2][y2];f[x1][y1][x2][y2] = 2147483647 / 3;for(int i = x1; i < x2; ++i)f[x1][y1][x2][y2] = min(dp(i+1, y1, x2, y2) + dp(x1, y1, i, y2) + abs(y1 - y2) + 1, f[x1][y1][x2][y2]);for(int i = y1; i < y2; ++i)f[x1][y1][x2][y2] = min(dp(x1, y1, x2, i) + dp(x1, i+1, x2, y2) + abs(x1 - x2) + 1, f[x1][y1][x2][y2]);return f[x1][y1][x2][y2];
}
int n, m, k;
void solve(int tot) {memset(f, -1, sizeof(f));memset(mapp, 0, sizeof(mapp));for(int i = 1; i <= k; ++i) {int x = read(), y = read();mapp[x][y] = 1;}for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + mapp[i][j];dp(1, 1, n, m);printf("Case %d: %d\n", tot, f[1][1][n][m]);
}
int main() {int tot = 0;while(scanf("%d %d %d", &n, &m, &k) != EOF)solve(++tot);return 0;
}

转载于:https://www.cnblogs.com/wxl-Ezio/p/11028787.html

UVA1629 Cake slicing相关推荐

  1. 切蛋糕 Cake slicing

    UVA1629 定义: U p p e r L e f t UpperLeft UpperLeft为矩形左上角, L o w e r R i g h t LowerRight LowerRight为右 ...

  2. uva 1629——Cake slicing

    题意:有一个n行m列网格蛋糕上有一些樱桃,每次可以把蛋糕一刀切成两块,最后使每块蛋糕上都有一个樱桃且切割线总长度最小. 思路:区间dp,记忆化搜索整个过程,然后分区间从上到下,从左到右,分区间递归找到 ...

  3. 暑训day1解题报告

    A - Painting the sticks 因为不能覆盖涂/涂两次,所以就数数有几个三个一块儿就行了. #include<cstdio> int a[100],ans ; int ma ...

  4. 区间DP小结(附经典例题)

    写这篇文章的目的主要是想总结下区间DP的经典题目,同时给自己复习巩固这方面知识点. 区间DP 一.定义 ​ 区间DP是线性动态规划的扩展,适用场景为每段区间的最优解可以通过更小区间的最优解得到.所以我 ...

  5. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  6. 【日程训练】算法脱贫计划

    算法脱贫计划 前言 2020-12-26 2020-12-27 2020-12-28 ~ 2020-1-1 2021-1-1 ~ 2021-1-16 [寒假训练计划]2021-1-17 ~ 2021- ...

  7. [Cake] 1. CI中的Cake

    在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell或者Bash在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. ...

  8. 人群场景分析--Slicing Convolutional Neural Network for Crowd Video Understanding

    Slicing Convolutional Neural Network for Crowd Video Understanding CVPR2016 http://www.ee.cuhk.edu.h ...

  9. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

最新文章

  1. Hugo + Github Pages 搭建个人博客
  2. 利用OpenCV的convexHull和convexityDefects做凸包(凸壳)检测及凸包(凸壳)的缺陷检测
  3. Ubuntu14.04安装Torch7笔记
  4. CodeForces - 1300E Water Balance(贪心)
  5. Hadoop之InputFormat数据输入详解
  6. IE下var丢失造成的错误
  7. ERROR 程序出错,错误原因:'bytes' object has no attribute 'read'
  8. python怎么读取csv文件-python怎么读取csv文件
  9. php+log+iis,利用nxlog以syslog方式发送iis日志
  10. 2019PLAGH-MIT医疗大数据学术交流及Datathon活动正式开始,Workshop环节精彩纷呈
  11. 基于MATLAB绘制双纵坐标轴图
  12. Java tif转jpg代码实现
  13. 怎么禁用笔记本的键盘
  14. MSDC 4.3 接口规范(4)
  15. 短说 3.7.1正式版更新【新增悬赏问答、打赏、付费看帖、IP属地】
  16. ctf之crypto练习二
  17. System.currentTimeMillis()和System.nanoTime()的区别
  18. Smartbi与华为云强强联合,共建云上BI新生态
  19. python学习:向Firebird数据库表中插入数据
  20. 《“人工智能”主题论坛》学习笔记(一)

热门文章

  1. C++和Java中类继承同名函数的区分
  2. 【译】A gentle introduction to self-sovereign identity
  3. 《Android插件化技术——原理篇》
  4. Android开发工具之Android Studio---版本控制SVN使用三(常规操作)
  5. wpf将文字转化为图形_工程师们开发出将天然气转化为固体的方法
  6. java堆外内存6_Java堆外内存排查小结
  7. mqtt调试助手_物联网入门,如何使用MQTT协议,连接Tlink物联网平台
  8. python join函数用法-Python join()函数
  9. 开机时没有显示Administrator
  10. python中的utils模块_使用Python的package机制如何简化utils包设计详解