UVA1629_Cake slicing
Cake slicing
给你一个矩形大小,和每个樱桃的坐标,现在让你去切使得切之后的小矩形包含一个樱桃,每次切的代价是切痕的长度,问你最小代价是多少
思路:
首先要明白一点,不能切除一个不含樱桃的矩形,因为那样完全没必要切,只是在浪费代价,那么就需要递归求解这个问题了,把这个问题扔给子局面(分),并统计并返回最优解(合),这运用到分治思想,也可以说是记忆化搜索+状态转移
具体如何分?就是枚举所有合法的切的方式,比如从中间竖着切,那么他的代价就是两个子局面的代价和加上这次切的代价
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 23;
const int INF = 0x3f3f3f3f;
int dp[maxn][maxn][maxn][maxn],flag[maxn][maxn],sum[maxn][maxn],m,n,k;
void getsum(){
memset(sum,0,sizeof sum);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
sum[i][j] = sum[i][j-1] +flag[i][j];
}
}
}
int findnum(int l,int r,int u,int d){
int ans=0;
for(int i=u;i<=d;i++){
ans += sum[i][r] - sum[i][l-1];
}
return ans;
}
int dfs(int l,int r,int u,int d){
int &ans = dp[l][r][u][d];
if(ans>=0) return ans;
int num = findnum(l,r,u,d);
if(!num) return ans = INF;
if(num==1) return ans = 0;
ans = INF;
for (int i=l;i<r;i++){
ans = min(dfs(l,i,u,d)+dfs(i+1,r,u,d)+(d-u)+1,ans);
}
for (int i=u;i<d;i++){
ans = min(dfs(l,r,u,i)+dfs(l,r,i+1,d)+(r-l)+1,ans);
}
return ans;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
int kase=0;
int a,b;
while(cin>>m>>n>>k){
memset(dp,-1,sizeof dp);
memset(flag,0,sizeof flag);
for(int i=1;i<=k;i++){
cin>>a>>b;flag[a][b]=1;
}
getsum();
printf("Case %d: %d\n",++kase,dfs(1,n,1,m));
}
return 0;
}
UVA1629_Cake slicing的更多相关文章
- 从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数
一.多态 多态性是面向对象程序设计的重要特征之一. 多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态的实现: 函数重载 运算符重载 模板 虚函数 (1).静态绑定与动态绑 ...
- BZOJ 2196: [Usaco2011 Mar]Brownie Slicing( 二分答案 )
二分答案就可以了.... ----------------------------------------------------------------------- #include<cst ...
- Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】
目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...
- Python学习--字符串slicing
Found this great table at http://wiki.python.org/moin/MovingToPythonFromOtherLanguages Python indexe ...
- ZOJ 3427 Array Slicing (scanf使用)
题意 Watashi发明了一种蛋疼(eggache) 语言 你要为这个语言实现一个 array slicing 函数 这个函数的功能是 有一个数组初始为空 每次给你一个区间[ l, r) 和 ...
- Object Slicing in C++
In C++, a derived class object can be assigned to base class, but the other way is not possible. cla ...
- [Python Cookbook] Numpy Array Slicing and Indexing
1-D Array Indexing Use bracket notation [ ] to get the value at a specific index. Remember that inde ...
- [Python] Slicing Lists
In addition to accessing individual elements from a list we can use Python's slicing notation to acc ...
- 《流畅的Python》 Sequence Hacking, Hashing and Slicing(没完成)
序列修改,散列和切片 基本序列协议:Basic sequence protocol: __len__ and __getitem__ 本章通过代码讨论一个概念: 把protocol当成一个正式接口.协 ...
随机推荐
- 使用jdbc查询防止出现中文乱码的方法
在使用mysql创建数据库及表格,在navicat中可以正常查询出中文,但使用jdbc查询的结果中,中文为乱码. 网上查到资料,为了能够彻底一劳永逸的解决这个问题,需要修改mysql下配置文件my.i ...
- TCL自动化之SSH交互式
目前ssh工具很多,但是能够轻松运用到自动化脚本中,可以轻松适配任何环境,满足ssh交互式登录的tcl工具包很少 下面是个人在tcl自动化过程中比较满意的一款自动化脚本 通过使用管道方式分装plink ...
- 华为Android手机打开Log
华为Android手机打开Log, 显示日志方法 今天在华为u8650上调试应用程序时,发现Eclipse的log始终无法显示,在网上找了好多资料,甚至stack overflow也查了,最后终于找到 ...
- 我心中的ASP.NET Core 新核心对象WebHost(二)
这是ASP.NET Core新核心对象系列的第二篇,上一篇 WebHost准备阶段 我们讲到了WebHostBuilder的初始化及配置.我们给WebHostBuilder进行以下配置 UseKest ...
- typescript 深层次对象内层(N)转外层(N),支持多层级递归转换,多应用于多语言数据结构转换
如下数据结构转换 var a = { b: { en: 1, zh: 2, }, c: { en: 3, zh: 4, }, } //===> var b = { en: { b: 1, c: ...
- Java笔试题-List l = new List()
前言: 最近遇到的一道很基础的题,有时候大家可能离开了编译器就不行了. import java.util.List; /** * * @author catchegg * create date: 2 ...
- quotaon - 开启关闭文件系统配额
总览 (SYNOPSIS) quotaon [ -e | d ] [ -vug ] filesystem... quotaon [ -e | d ] [ -avug ] quotaoff [ -e | ...
- 140-基于双TI DSP TMS320C6670+XC7K480T的6UCPCI Express高速数据处理平台
基于双TI DSP TMS320C6670+XC7K480T的6UCPCI Express高速数据处理平台 一.板卡概述: 本技术开发主要是支持客户完成基于TI DSP TMS320C6678芯片和X ...
- canvas 绘制二次贝塞尔曲线
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- webRTC脱坑笔记(一)— 初识webRTC
webRTC概述 WebRTC--- `Web browsers with Real-Time Communications (RTC)` WebRTC是一个开源项目,可以在`Web`和本机应用程序中 ...