博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 1629 切蛋糕
阅读量:5130 次
发布时间:2019-06-13

本文共 1264 字,大约阅读时间需要 4 分钟。

题目链接:

 

题意:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有一个樱桃~问最少切割距离是?

 

分析:可以根据每次的切割范围遍历找最优值,也就是说状态描述d[u][d][l][r] 是这个范围内的最短距离。要是这个范围内只有一个樱桃,那么就是 0 ,要是没有樱桃就是无穷大。

 

1 #include 
2 3 using namespace std; 4 5 const int INF = 0x3f3f3f3f; 6 7 bool maps[25][25]; 8 int r,c,cnt; 9 10 int dps[25][25][25][25];11 12 int sum(int u,int d,int l,int r)13 {14 int sums = 0;15 for(int i=u; i<=d; i++)16 for(int j=l; j<=r; j++)17 if(maps[i][j])18 sums++;19 return sums;20 }21 22 int dp(int u,int d,int l,int r)23 {24 int &ans = dps[u][d][l][r];25 if(ans!=-1)26 return ans;27 else if(sum(u,d,l,r)==1)28 return ans=0;29 else if(sum(u,d,l,r)==0)30 return ans=INF;31 else32 {33 ans = INF;34 for(int i=u; i<=d; i++)35 ans = min(ans,dp(u,i,l,r)+dp(i+1,d,l,r)+r-l+1);36 for(int i=l; i<=r; i++)37 ans = min(ans,dp(u,d,l,i)+dp(u,d,i+1,r)+d-u+1);38 }39 return ans;40 }41 42 int main()43 {44 int kase = 1;45 while(scanf("%d%d%d",&r,&c,&cnt)!=EOF)46 {47 memset(dps,-1,sizeof(dps));48 memset(maps,0,sizeof(maps));49 50 51 for(int i=0; i

 

转载于:https://www.cnblogs.com/TreeDream/p/6240800.html

你可能感兴趣的文章
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
Wpf 之Canvas介绍
查看>>
linux history
查看>>
jQuery on(),live(),trigger()
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
【架构】Linux的架构(architecture)
查看>>
ASM 图解
查看>>
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>