UVA - 1629

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

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int d[][][][];
int ans[][][][];
int n,m,k,cse;
int init(int t,int b,int l,int r)
{
if(d[t][b][l][r]!=-) return d[t][b][l][r];
int m1;
if(b-t>r-l)
{
m1=(t+b)>>;
return d[t][b][l][r]=init(t,m1,l,r)+init(m1+,b,l,r);
}
else
{
m1=(l+r)>>;
return d[t][b][l][r]=init(t,b,l,m1)+init(t,b,m1+,r);
}
}
int dp(int t,int b,int l,int r)
{
if(ans[t][b][l][r]!=0x3f3f3f3f) return ans[t][b][l][r];
if(d[t][b][l][r]==) return ans[t][b][l][r]=;
int i;
for(i=t;i<b;i++)
if(d[t][i][l][r]&&d[i+][b][l][r])
ans[t][b][l][r]=min(ans[t][b][l][r],dp(t,i,l,r)+dp(i+,b,l,r)+r-l+);
for(i=l;i<r;i++)
if(d[t][b][l][i]&&d[t][b][i+][r])
ans[t][b][l][r]=min(ans[t][b][l][r],dp(t,b,l,i)+dp(t,b,i+,r)+b-t+);
return ans[t][b][l][r];
}
int main()
{
int i,j,t1,t2,i1,j1;
while(scanf("%d%d%d",&n,&m,&k)==)
{
memset(d,-,sizeof(d));
memset(ans,0x3f,sizeof(ans));
for(i=;i<=n;i++)
for(j=;j<=m;j++)
d[i][i][j][j]=;
for(i=;i<=k;i++)
{
scanf("%d%d",&t1,&t2);
d[t1][t1][t2][t2]=;
}
for(i=;i<=n;i++)
for(j=;j<=m;j++)
for(i1=i;i1<=n;i1++)
for(j1=j;j1<=m;j1++)
init(i,i1,j,j1);
printf("Case %d: %d\n",++cse,dp(,n,,m));
}
return ;
}

Cake slicing UVA - 1629的更多相关文章

  1. uva 1629

    1629 - Cake slicing Time limit: 3.000 seconds A rectangular cake with a grid of m * n <tex2html_v ...

  2. UVa 1629 Cake slicing (记忆化搜索)

    题意:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有一个樱桃,问最少切割距离是多少. 析:很容易知道是记忆化搜索,我们用dp[u][d][l][r]来 ...

  3. UVa 1629 DP Cake slicing

    题意: 一块n×m的蛋糕上有若干个樱桃,要求切割若干次以后,每块蛋糕上有且仅有1个樱桃.求最小的切割长度. 分析: d(u, d, l, r)表示切割矩形(u, d, l, r)所需要的最小切割长度. ...

  4. 【Uva 1629】 Cake slicing

    [Link]: [Description] 给你一个n*m的格子; 然后里面零零散散地放着葡萄 让你把它切成若干个小矩形方格 使得每个小矩形方格都恰好包含有一个葡萄. 要求切的长度最短; 问最短的切割 ...

  5. UVA - 1629 Cake slicing(切蛋糕)(dp---记忆化搜索)

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

  6. 1629 - Cake slicing(DP)

    花了近2个小时终于AC,好爽.. 一道类似于最优矩阵链乘的题目,受<切木棍>那道题的启示,该题的原理也是一样的,仅仅只是变成了且面积.那么对应的也要添加维度 . 显然要完整的表示状态,最少 ...

  7. Uva 1629 切蛋糕

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

  8. Cake slicing

    题意: n*m的方格中有k个点,现在要把方格分开使得每个点在一个部分,每分一次花费边长的费用,求完成花的最小费用 分析: dp[sx][sy][ex][ey]表示分割起点(sx,sy)终点(ex,ey ...

  9. uva1629,Cake Slicing,记忆化搜索

    同上个题一样,代码相似度极高,或者说可以直接用一个模板吧 dp[i,j,p,q]表示一块长为j-i+1,宽为q-p+1,左上角在位置(i,j)上的蛋糕,dp[]表示当前状态下的最优值,然后对该块蛋糕枚 ...

随机推荐

  1. SQL 通配符及其使用

    Sql Server中通配符的使用 通配符_ "_"号表示任意单个字符,该符号只能匹配一个字符."_"可以放在查询条件的任意位置,且只能代表一个字符.一个汉字只 ...

  2. LeetCode(66)题解: Plus One

    https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of d ...

  3. day 18 面向对象的 继承

    一.概念性知识 面向对象的三大特征:     继承,多态,封装 继承是创建新类的一种方法,在python中,新建的类可以继承一个或多个父类,父类称作基类或超类,新建的类又称作派生类或子类. 继承的好处 ...

  4. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法

    一.匿名函数 匿名函数的结构:变量   =  lamda  参数: 返回值 a  =  lamda  x : x*x       # x为参数,   : 后边的为函数体 print(a(x)) def ...

  5. Wordpress播客网站搭建

  6. __sizeof__()

    https://bugs.python.org/issue2898 https://bugs.python.org/file10353/footprint.patch Index: Python/sy ...

  7. ABAP range 用法

    转自http://www.sapjx.com/abap-range-table.html 1. Range Table 概述 Range Table 为 SAP R/3系统标准内表的一种,结构与 Se ...

  8. mysql---列的选取原则

    列选择原则: :字段类型优先级 整型 > date,整型>浮点型,time > enum,char>varchar > blob 列的特点分析: 整型: 定长,没有国家/ ...

  9. JavaScript数组遍历:for、foreach、for in、for of、$.each、$().each的区别

    一.for Javascript中的for循环,它用来遍历数组 var arr = [1,2,3,4] for(var i = 0 ; i< arr.length ; i++){ console ...

  10. Java语言基础二

      1.常量的概述和使用 A:什么是常量 B:Java中常量的分类 常量分类为六种:a.”字符串” b.’字符’ c.整数 d.小数 e.boolern(布尔类型) 返回值为 FALSE和TRUE   ...