题意:

n*m的方格中有k个点,现在要把方格分开使得每个点在一个部分,每分一次花费边长的费用,求完成花的最小费用

分析:

dp[sx][sy][ex][ey]表示分割起点(sx,sy)终点(ex,ey)的矩形最小花费,判断一下矩形内有无点,无点置成无穷大(不会被选择),若有一个点则完成分割值为0,若多于一个点继续分割。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int n,m,dp[][][][],used[][];
int judge(int sx,int sy,int ex,int ey){
int num=;
for(int i=sx+;i<=ex;++i)
for(int j=sy+;j<=ey;++j)
{
if(used[i][j]){
num++;
if(num==)return ;
}
}
return num;
}
int dfs(int sx,int sy,int ex,int ey){
if(dp[sx][sy][ex][ey]!=-)return dp[sx][sy][ex][ey];
if(judge(sx,sy,ex,ey)==)return dp[sx][sy][ex][ey]=INF;
if(judge(sx,sy,ex,ey)==)return dp[sx][sy][ex][ey]=;
int tmp=INF;
for(int i=sx+;i<ex;++i)
tmp=min(tmp,dfs(sx,sy,i,ey)+dfs(i,sy,ex,ey)+ey-sy);
for(int i=sy+;i<ey;++i)
tmp=min(tmp,dfs(sx,sy,ex,i)+dfs(sx,i,ex,ey)+ex-sx);
return dp[sx][sy][ex][ey]=tmp;
}
int main()
{
int t,ca=,k;
while(~scanf("%d%d%d",&n,&m,&k)){
int x,y;
memset(used,,sizeof(used));
for(int i=;i<k;++i)
{
scanf("%d%d",&x,&y);
used[x][y]=;
}
memset(dp,-,sizeof(dp));
printf("Case %d: %d\n",++ca,dfs(,,n,m));
}
return ;
}

Cake slicing的更多相关文章

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

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

  2. 1629 - Cake slicing(DP)

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

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

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

  4. UVA-1629 Cake slicing (DP、记忆化搜索)

    题目大意:一块n*m的矩形蛋糕,有k个草莓,现在要将蛋糕切开使每块蛋糕上都恰有一个(这意味着不能切出不含草莓的蛋糕块)草莓,要求只能水平切或竖直切,求最短的刀切长度. 题目分析:定义状态dp(xa,y ...

  5. UVA1629 Cake slicing

    题目传送门 直接暴力定义f[x1][y1][x2][y2]是使对角为\((x1, y1),(x2, y2)\)这个子矩形满足要求的最短切割线长度 因为转移顺序不好递推,采用记忆化搜索 #include ...

  6. UVa 1629 DP Cake slicing

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

  7. 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 ...

  8. 【Uva 1629】 Cake slicing

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

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

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

随机推荐

  1. oracle的全文索引

    1.查看oracle的字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ------------------- ...

  2. HtmlAgilityPack 总结(一)

    一个解析html的C#类库HtmlAgilityPack, HtmlAgilityPack是一个基于.Net的.第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端 ...

  3. Java学习笔记之:Java 继承

    一.引言 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类 ...

  4. 2014-9-17二班----10 web project

    package cn.rwkj.servlet; import java.io.IOException; import javax.servlet.ServletException; import j ...

  5. Excel多条件筛选求和

    单位A 代码B 面积(㎡)C A组 011 124 A组 123 15 A组 011 356 A组 123 44 B组 123 31 B组 011 2 B组 123 2 按照单位和代码求面积的和,可以 ...

  6. Android ActionBar标题和渐变背景

    需要在AndroidManifest.xml中设置 android:theme="@style/Theme.AppCompat" 如果提示找不到,请按下图设置: 至于如何引入的方法 ...

  7. libsvm+detector_(libsvm参数说明)

    细分析了cvhop.cpp中的compute函数,可以直接调用它来获得样本HOG,然后训练得到检测算子 1.制作样本2.对每一张图片调用hog.compute(img, descriptors,Siz ...

  8. Ubuntu 12.04搭建MTK 6577 安卓开发环境

    Ubuntu 12.04搭建 MTK 6577安卓开发环境 1.       下载并安装Vmware虚拟机: 2.       下载并在虚拟机上安装Ubuntu 12.04 iso 安装包:下载地址: ...

  9. 一个简单json数据提交实例

    1.客户端编程:jsp页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  10. 关于BigDecimal的四舍五入和截断 (2007-08-10 15:06:26)

    关于四舍五入:ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1 BigDe ...