https://vjudge.net/problem/UVA-1629

题意:

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

思路:

记忆化搜索。

d[u][d][l][r]表示这个范围内最少还需要切割多少长度。题目不难,代码很容易懂。

  1. #include<iostream>
  2. #include<string>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. const int INF = ;
  8.  
  9. int n, m, t;
  10. int map[][];
  11. int dp[][][][];
  12.  
  13. int cacl(int u, int d, int l, int r)
  14. {
  15. int cnt = ;
  16. for (int i = u + ; i <= d; i++)
  17. {
  18. for (int j = l + ; j <= r; j++)
  19. {
  20. if (map[i][j]) cnt++;
  21. if (cnt == ) return ; //如果已经还有2个樱桃,说明还是要切割的
  22. }
  23. }
  24. if (cnt == ) return ;
  25. else return ;
  26. }
  27.  
  28. int dfs(int u, int d, int l, int r)
  29. {
  30. int& ans = dp[u][d][l][r];
  31. if (ans) return ans;
  32. ans = INF; //初始化为无穷大
  33. int tot = cacl(u, d, l, r);
  34. if (tot == ) return ans = ; //如果只有一个樱桃,不需要切割了
  35. if (tot == ) return INF; //没有樱桃说明切割无效
  36. //水平切割
  37. for (int i = u + ; i < d; i++)
  38. ans = min(dfs(u, i, l, r) + dfs(i, d, l, r) + r - l, ans);
  39. //垂直切割
  40. for (int i = l + ; i < r; i++)
  41. ans = min(dfs(u, d, l, i) + dfs(u, d, i, r) + d - u, ans);
  42. return ans;
  43. }
  44.  
  45. int main()
  46. {
  47. //freopen("D:\\txt.txt", "r", stdin);
  48. int kase = ;
  49. while (cin >> n >> m >> t)
  50. {
  51. memset(map, , sizeof(map));
  52. memset(dp, , sizeof(dp));
  53. int x, y;
  54. for (int i = ; i < t; i++)
  55. {
  56. cin >> x >> y;
  57. map[x][y] = ;
  58. }
  59. cout << "Case " << ++kase << ": " << dfs(, n, , m) << endl;
  60. }
  61. return ;
  62. }

UVa 1629 切蛋糕(记忆化搜索)的更多相关文章

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

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

  2. UVA - 10118Free Candies(记忆化搜索)

    题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每一个糖果都有颜色.每次你都仅仅能拿随意一堆最上面的糖果,放到自己的篮子里.假设有两个糖果颜色同样的话,就行 ...

  3. UVa 10617 Again Palindromes / 记忆化搜索

    删除若干个字母后 剩下的是回文串 求有多少个 记忆化搜索 dp[i][j]表示i j 之间有多少个 其实递推也可以的 long long #include <stdio.h> #inclu ...

  4. uva 10626 - Buying Coke(记忆化搜索)

    题目链接:10626 - Buying Coke 题目大意:给出要买可乐的数量, 以及1元,5元和10元硬币的数量, 每瓶可乐8元,每次照钱会按照最少硬币的方式找回, 问如何投币可使得投入的硬币数最少 ...

  5. uva 10891 区间dp+记忆化搜索

    https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...

  6. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  7. uva 10651 - Pebble Solitaire(记忆化搜索)

    题目链接:10651 - Pebble Solitaire 题目大意:给出一个12格的棋盘,‘o'代表摆放棋子,’-‘代表没有棋子, 当满足’-oo'时, 最右边的棋子可以跳到最左边的位子,而中间的棋 ...

  8. Uva 1629 切蛋糕

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

  9. UVA - 10118 Free Candies 记忆化搜索经典

    思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...

随机推荐

  1. java list map用法

    1.初始化,方法1 //初始化List List<string> list = new ArrayList</string><string>(); list.add ...

  2. A solution for MySQL Assertion failure FIL_NULL

    A solution for MySQL Assertion failure FIL_NULL http://michaelfranzl.com/2014/01/25/solution-mysql-a ...

  3. HTML5-CSS3-JavaScript(3)

    我们就从HTML5的基础总结起.希望可以提高自身的基础. HTML5 头部 和 元信息 使用 <head.../> 元素可以定义HTML文档头,该元素可以包含如下子元素. <scri ...

  4. [vue]vue v-on事件绑定(原生修饰符+vue自带事件修饰符)

    preventDefault阻止默认行为和stopPropagation终止传递 event.preventDefault() 链接本来点了可以跳转, 如果注册preventDefault事件,则点了 ...

  5. MySQL主从复制(Replication for Backup)

    环境:MySQL5.7,VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 1. 基本概念和操作思路 主从复制能做什么 数据库的主从复制,是 ...

  6. keepalived+mysql 高可用集群

    mysql 为主主模式参考 https://my.oschina.net/sanmuyan/blog/877373 192.168.100.129 mysql 主节点/keepalived 主节点 1 ...

  7. 7.12 Models -- Frequently Asked Questions

    一.Should I use a query or a filter to seach records?我应该使用一个查询或者过滤器来搜索记录吗? 这取决于你想要搜索多少reocrds并且它们是否被加 ...

  8. H2O.ai初步使用

    1.官网下载最新稳定版,https://www.h2o.ai/download/ ,如果点击下载无反应,请使用ie浏览器 2.解压h2o-3.18.0.10.zip到目录h2o-3.18.0.10 3 ...

  9. Canvas标签基础

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. memcache分布式布置方案

    利用hash算法 key->hash->取余%2 mod ->server=array()=>server[mod]算出是第几个memcache服务器