UVA1629 Cake slicing
题目传送门
直接暴力定义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相关推荐
- 切蛋糕 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为右 ...
- uva 1629——Cake slicing
题意:有一个n行m列网格蛋糕上有一些樱桃,每次可以把蛋糕一刀切成两块,最后使每块蛋糕上都有一个樱桃且切割线总长度最小. 思路:区间dp,记忆化搜索整个过程,然后分区间从上到下,从左到右,分区间递归找到 ...
- 暑训day1解题报告
A - Painting the sticks 因为不能覆盖涂/涂两次,所以就数数有几个三个一块儿就行了. #include<cstdio> int a[100],ans ; int ma ...
- 区间DP小结(附经典例题)
写这篇文章的目的主要是想总结下区间DP的经典题目,同时给自己复习巩固这方面知识点. 区间DP 一.定义 区间DP是线性动态规划的扩展,适用场景为每段区间的最优解可以通过更小区间的最优解得到.所以我 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 【日程训练】算法脱贫计划
算法脱贫计划 前言 2020-12-26 2020-12-27 2020-12-28 ~ 2020-1-1 2021-1-1 ~ 2021-1-16 [寒假训练计划]2021-1-17 ~ 2021- ...
- [Cake] 1. CI中的Cake
在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell或者Bash在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. ...
- 人群场景分析--Slicing Convolutional Neural Network for Crowd Video Understanding
Slicing Convolutional Neural Network for Crowd Video Understanding CVPR2016 http://www.ee.cuhk.edu.h ...
- 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 ...
最新文章
- Hugo + Github Pages 搭建个人博客
- 利用OpenCV的convexHull和convexityDefects做凸包(凸壳)检测及凸包(凸壳)的缺陷检测
- Ubuntu14.04安装Torch7笔记
- CodeForces - 1300E Water Balance(贪心)
- Hadoop之InputFormat数据输入详解
- IE下var丢失造成的错误
- ERROR 程序出错,错误原因:'bytes' object has no attribute 'read'
- python怎么读取csv文件-python怎么读取csv文件
- php+log+iis,利用nxlog以syslog方式发送iis日志
- 2019PLAGH-MIT医疗大数据学术交流及Datathon活动正式开始,Workshop环节精彩纷呈
- 基于MATLAB绘制双纵坐标轴图
- Java tif转jpg代码实现
- 怎么禁用笔记本的键盘
- MSDC 4.3 接口规范(4)
- 短说 3.7.1正式版更新【新增悬赏问答、打赏、付费看帖、IP属地】
- ctf之crypto练习二
- System.currentTimeMillis()和System.nanoTime()的区别
- Smartbi与华为云强强联合,共建云上BI新生态
- python学习:向Firebird数据库表中插入数据
- 《“人工智能”主题论坛》学习笔记(一)
热门文章
- C++和Java中类继承同名函数的区分
- 【译】A gentle introduction to self-sovereign identity
- 《Android插件化技术——原理篇》
- Android开发工具之Android Studio---版本控制SVN使用三(常规操作)
- wpf将文字转化为图形_工程师们开发出将天然气转化为固体的方法
- java堆外内存6_Java堆外内存排查小结
- mqtt调试助手_物联网入门,如何使用MQTT协议,连接Tlink物联网平台
- python join函数用法-Python join()函数
- 开机时没有显示Administrator
- python中的utils模块_使用Python的package机制如何简化utils包设计详解