有一个n行m列的网格蛋糕,上面有一些樱桃。求使得每块蛋糕上都有一个樱桃的分割最小长度

思路:dp。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#define eps 1e-6
#define LL long long
using namespace std; const int maxn = 100 + 5;
const int INF = 10000000;
int d[22][22][22][22];
int n, m, K, kase = 0;//樱桃数量
int cherry[22][22], sumv[22][22]; int cpu(int a, int b, int c, int d) {
return sumv[b][d] - sumv[a-1][d] - sumv[b][c-1] + sumv[a-1][c-1];
} int dp(int begx, int endx, int begy, int endy, int cherrynum) {
int& ans = d[begx][endx][begy][endy];
if(cherrynum == 1) return 0;
if(ans != -1) return ans;
ans = INF;
for(int i = begx; i < endx; i++) if(cpu(begx, i, begy, endy) > 0 && cpu(begx, i, begy, endy) < cherrynum)
ans = min(ans, dp(begx, i, begy, endy, cpu(begx, i, begy, endy))+dp(i+1, endx, begy, endy, cherrynum-cpu(begx, i, begy, endy))+endy-begy+1);
for(int i = begy; i < endy; i++) if(cpu(begx, endx, begy, i) > 0 && cpu(begx, endx, begy, i) < cherrynum)
ans = min(ans, dp(begx, endx, begy, i, cpu(begx, endx, begy, i))+dp(begx, endx, i+1, endy, cherrynum-cpu(begx, endx, begy, i))+endx-begx+1);
return ans;
} void init() {
memset(d, -1, sizeof(d));
memset(cherry, 0, sizeof(cherry));
memset(sumv, 0, sizeof(sumv));
int x, y;
for(int i = 0; i < K; i++) {
cin >> x >> y;
cherry[x][y] = 1;
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
sumv[i][j] = sumv[i][j-1] + sumv[i-1][j] + cherry[i][j] - sumv[i-1][j-1];
} void solve() {
printf("Case %d: %d\n", ++kase, dp(1, n, 1, m, K));
} int main() {
//freopen("input.txt", "r", stdin);
while(scanf("%d%d%d", &n, &m, &K) == 3) {
init();
solve();
}
return 0;
}

uva 1629切蛋糕(dp)的更多相关文章

  1. Uva 1629 切蛋糕

    题目链接:https://vjudge.net/contest/146179#problem/B 题意:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有 ...

  2. UVa 1629 切蛋糕(记忆化搜索)

    https://vjudge.net/problem/UVA-1629 题意: 有一个n行m列的网格蛋糕上有一些樱桃.每次可以用一刀沿着网格线把蛋糕切成两块,并且只能直切不能拐弯.要求最后每一块蛋糕上 ...

  3. P1714 切蛋糕 dp+单调队列

    题意: 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到 ...

  4. Cake slicing UVA - 1629

    UVA - 1629 ans[t][b][l][r]表示t到b行,l到r列那一块蛋糕切好的最小值d[t][b][l][r]表示t到b行,l到r列区域的樱桃数,需要预处理 #include<cst ...

  5. openjudge6047分蛋糕[DP]

    描述 有一块矩形大蛋糕,长和宽分别是整数w .h.现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形.且长和宽均为整数.切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕.请计算:最后得到的m块小蛋糕中,最大 ...

  6. LRJ入门经典-0903切蛋糕305

    原题 LRJ入门经典-0903切蛋糕305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 如图所示有一个矩形蛋糕,上面划分成 ...

  7. 洛谷P1528 切蛋糕 [搜索,二分答案]

    题目传送门 切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把刀 ...

  8. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  9. [洛谷P1528] 切蛋糕

    洛谷题目链接:切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把 ...

随机推荐

  1. Android几种强大的下拉刷新库

    BeautifulRefreshLayout 众多优秀的下拉刷新(除了我写的之外T_T) 说起下拉刷新,好像经历一段历史的洗礼... (1)在我刚学android的时候,用的是XListView,在g ...

  2. Java EE 8 来了

      作者 李士窑 发布于 2014年9月2日. 估计阅读时间: 不到一分钟 | 自2013年6月Java EE 7发布以来,Java开发团队在这段时间内一直在规划和搜集下一个大版本Java EE 8带 ...

  3. 利用HTML5开发Android

    ● Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器和WebView默认为mdpi.hdpi相当于mdpi的 ...

  4. java util Aarrys 类

    toString方法  产生一维数组的二维版本 public static String toString(type[] a) { //type 是传入数据类型 if (a == null) retu ...

  5. ElasticSearch - query vs filter

    query vs filter 来自stackoverflow Stackoverflow - queries-vs-filters Question 题主希望知道Query和Filter的区别 An ...

  6. Using jconsole to connect to JMX on AS7

    Using jconsole to connect to JMX on AS7 https://developer.jboss.org/wiki/UsingJconsoleToConnectToJMX ...

  7. JVM启动过程

    JVM启动过程包括:加载.连接.初始化 1.加载:就是将class文件加载到内存.详细的说是,将class文件加载到运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封 ...

  8. python小知识-__call__和类装饰器的结合使用,数据描述符__get__\__set__\__delete__(描述符类是Python中一种用于储存类属性值的对象)

    class Decorator(): def __init__(self, f): print('run in init......') self.f = f def __call__(self, a ...

  9. KNN分类算法及python代码实现

    KNN分类算法(先验数据中就有类别之分,未知的数据会被归类为之前类别中的某一类!) 1.KNN介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法. 机器学习, ...

  10. 【Java】 剑指offer(3) 二维数组中的查找

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...