UVA1629 切蛋糕 Cake slicing 题解

题目链接:UVA1629 切蛋糕 Cake slicing

题意:这个翻译够烂的,直接看pdf

翻译:有一个n行m列(1<=n,m<=20)的网络蛋糕上有k个樱桃。每次可以用一刀沿着网络线把蛋糕切成两块,并且只能够直切不能拐弯。要求最后每一块蛋糕上恰好有一个樱桃,且切割线总长度最小。

输入输出格式 输入格式:每次输入有若干组数据。每组数据第一行有三个正整数n m k(行,列,樱桃个数),之后的k行每行两个正整数(樱桃的坐标) 输出格式:输出有若干行,对应每组数据。每行输出两个正整数(id,最小的切割长度)

输入输出样例 输入样例: 3 4 3 1 2 2 3 3 2 输出样例: Case 1: 5

首先普通的二维枚举好像不行

数据范围这么小,于是考虑从小的矩形向大的矩形更新

设 dp[x1][y1][x2][y2]dp[x_1][y_1][x_2][y_2]dp[x1​][y1​][x2​][y2​] 表示矩形的左下角为 (x1,y1)(x_1,y_1)(x1​,y1​) ,右上角为 (x2,y2)(x_2,y_2)(x2​,y2​) 时的最小花费

方便起见,下面转移方程中的 dp[x1][y1][x2][y2]dp[x_1][y_1][x_2][y_2]dp[x1​][y1​][x2​][y2​] 用 ddd 替代

考虑纵切,则有
d=min⁡x1≤i<x2(d,dp[x1][y1][i][y2]+dp[i+1][y1][x2][y2]+y2−y1+1)d=\min_{x_1 \le i < x_2}(d,dp[x_1][y_1][i][y_2]+dp[i+1][y_1][x_2][y_2]+y_2-y_1+1) d=x1​≤i<x2​min​(d,dp[x1​][y1​][i][y2​]+dp[i+1][y1​][x2​][y2​]+y2​−y1​+1)
考虑横切,则有
d=min⁡y1≤i<y2(d,dp[x1][y1][x2][i]+dp[x1][i+1][x2][y2]+x2−x1+1)d=\min_{y_1 \le i < y_2}(d,dp[x_1][y_1][x_2][i]+dp[x_1][i+1][x_2][y_2]+x_2-x_1+1) d=y1​≤i<y2​min​(d,dp[x1​][y1​][x2​][i]+dp[x1​][i+1][x2​][y2​]+x2​−x1​+1)
由于顺推无法保证dp顺序,考虑记忆化搜索

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(25)int n,m,k,id,f[N][N][N][N],sum[N][N];
int getsum(int a,int b,int c,int d)
{return sum[c][d]+sum[a-1][b-1]-sum[c][b-1]-sum[a-1][d];}
int dp(int x1,int y1,int x2,int y2)
{int t=getsum(x1,y1,x2,y2);if(!t)return INF;if(t==1)return 0;int &d=f[x1][y1][x2][y2];if(d!=INF)return d;for(int i=x1; i<x2; i++)d=min(d,dp(x1,y1,i,y2)+dp(i+1,y1,x2,y2)+y2-y1+1);for(int i=y1; i<y2; i++)d=min(d,dp(x1,y1,x2,i)+dp(x1,i+1,x2,y2)+x2-x1+1);return d;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);while(cin >> n >> m >> k && n && m){memset(sum,0,sizeof(sum));memset(f,0x3f,sizeof(f));for(int i=1,x,y; i<=k; i++)cin >> x >> y,sum[x][y]=1;for(int i=1; i<=n; i++) for(int j=1; j<=m; j++)sum[i][j]+=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1];cout << "Case "<< ++id << ": " << dp(1,1,n,m) << '\n';}return 0;
}

转载请说明出处

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. zoj 3537 cake 切蛋糕 区间DP+凸包+递归 最优三角形剖分

    题意:给出一些点表示多边形蛋糕的定点的位置(如果蛋糕是凹多边形就不能切),切蛋糕时每次只能在顶点和顶点间切,每一次切蛋糕都有相应的代价,给出代价的公式,问把蛋糕切成多个三角形的最小代价是多少 由于有可 ...

  3. 漫画:有趣的 “切蛋糕“ 问题

    -----  第二天  ----- 举个例子: 我们有5块蛋糕, 蛋糕的大小分别是 5,17,25,3,15 我们有7位顾客, 他们的饭量分别是 2,5,7,9,12,14,20 (每个蛋糕大小和顾客 ...

  4. 切蛋糕(洛谷P1714)

    切蛋糕 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大, ...

  5. 【Leetcode单调队列】- 洛谷P1714切蛋糕

    单调队列 解决该类问题的重点维护一个队列,从队首到队尾是递减的,队首是最大的.队尾是最小的. 队尾接受值,队首排出值. Java实现用双端队列,前面接收值,后面排出来值. 这类题目往往是跟滑动窗口一起 ...

  6. 湖大程序设计作业 控制台动画-切蛋糕

    [题目描述] 利用上次小班第五题的黑框绘制函数功能,绘制一张方布.方布上放着小明的正方形蛋糕,由不同的颜色和不同大小的方块组成.每次延时一秒后,绘制出分掉某块后的方布和蛋糕图形.最终在方布上显示一个数 ...

  7. n刀切蛋糕问题(最多切多少块c语言)

    分析:第一刀两块每切一刀多i块 //n刀切蛋糕问题,最多多少块 #include<stdio.h> int main(){int n,i;//i刀int cake;printf(" ...

  8. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——A题 切蛋糕

    题目描述 龙龙有一块蛋糕,现在他想将蛋糕平均切成k块,分给他的k名hxd.但是不幸的是,因为龙龙不擅长切蛋糕,他每一次只能将一块蛋糕平均分成两份.例如,将一块大小为1的蛋糕分割成两块大小为1/2的蛋糕 ...

  9. AI在中国,还没到抢切蛋糕的时候

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 他们中的不少名字,之前并不广为人知. 刘全全.王宇杰.王昌宝.帅靖文.张顺丰.蒋尚达.余革年.闵可锐.宋洪伟.李晓普.张晓伟.王峰.董倩倩 ...

  10. P1714 切蛋糕(线段树+前缀和)

    P1714 切蛋糕 解题思路:求连续区间不超过k的最大值.先求出前缀和,线段树维护前缀和,在一个长度为k的区间,找到前缀和最小的,用最后的值减去这个值,得到的就是在这个区间里的最大值.如果长度不能到达 ...

最新文章

  1. 周末--------粉红色的回忆
  2. 为什么我们使用Nginx而不是Apache?
  3. log4net使用详解 .
  4. 和硬件交换方面的知识
  5. win7安装python3.6_Win7 64位下python3.6.5安装配置图文教程
  6. linux防火墙的开启与关闭
  7. 水体专题提取与叶绿素a浓度反演
  8. vue跨域/webpack跨域
  9. 基于jQuery的响应式网站视频插件FitVids.js
  10. 【项目管理/PMP/PMBOK第六版/新考纲】计算题24道带答案解析!
  11. RAMOS (内存操作系统)-无忧百科(不断完善中)
  12. 微信公众号html在线编辑器,【微信公众平台工具开发】雷人微信网页编辑器
  13. python turtle画彩虹的代码_python绘制彩虹图
  14. dss数字签名技术java_DSS数字签名标准
  15. 《D o C P》学习笔记(3 - 1)Regular Expressions, other languages and interpreters - Lesson 3
  16. 6.10 通过屏幕截图功能快速插入网页图片 [原创Excel教程]
  17. 数学与计算机专业的论文,数学与计算机关系论文.doc
  18. python适合做游戏的背景音乐是什么_适合做游戏的背景音乐
  19. 一台计算机只能注册一台sql,局域网中的一台电脑为啥连接不到另一台电脑中的SQL远程数据库...
  20. nosql | 搭建mongodb副本集

热门文章

  1. 肿瘤 材料 计算机模拟,PeerJ: 计算机模拟揭示癌症多样性
  2. 感冒究竟能不能喝咖啡
  3. QT学习 实时显示时间
  4. ISLR读书笔记十六:最大边际分类器(maximal margin classifier)
  5. Linux之查看物理主机的CPU温度
  6. python制作日历并保存成excel_[python]获取一年日历数据并写入excel表格中
  7. 函数判断闰年:输入年份 判断此2月份的天数
  8. OPPO消息推送服务器,OPPO开放平台消息推送申请教程
  9. php获取m3u8的地址,如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例...
  10. ORACLE--面试知识点