$ \color{#0066ff}{ 题目描述 }$

普罗夫迪夫的著名巧克力大师Bonny需要切开一板带有葡萄干的巧克力。巧克力是一个包含许多相同的方形小块的矩形。小块沿着巧克力的边排列成n行m列,即共有nm块。每个小块上有1个或多个葡萄干,没有葡萄干在小块的边上或者跨过两个小块。 最开始,巧克力是一整块。Bonny需要把它切成上述的nm个独立的小块。因为Bonny很忙,她需要她的助手Sly peter帮她切。Peter只能从一端到另一端切直线并且他要为他的每一刀得到报酬。Bonny手头没有钱,但是她有足够的葡萄干,所以她提出用葡萄干付给peter。Sly peter同意接受葡萄干,但是有下面的条件:每次他把给定的一块巧克力切成两小块,他都要得到和那块给定的巧克力上葡萄干数目相同的葡萄干。 Bonny想要付给peter尽可能少的葡萄干。她知道这nm个小块中每一个小块上葡萄干的数目。她可以选择递给peter的巧克力的顺序,也可以告诉peter如何切(横切还是竖切)以及从哪里切。请告诉Bonny如何把巧克力切成一个个独立的小块。使她能够付给Sly peter尽可能少的葡萄干。

任务 写一个程序,给定每个小块上葡萄干的数目,计算Bonny要付给Sly peter的最少的葡萄干的数目。

\(\color{#0066ff}{输入格式}\)

你的程序必须从标准输入中读取下列数据:
第一行包含整数n和m,以一个空格隔开。
接下来的n行描述了每个小块上葡萄干的数目。这n行中第kth行描述的是第kth行小块巧克力。每行包含m个整数,分别以一个空格隔开。这些整数描述的是该行从左到右的小块。第kth行的第pth个整数表示位于第kth行第pth列的小块上的葡萄干数目。

\(\color{#0066ff}{输出格式}\)

你的程序必须向标准输出写入一行,该行包含一个整数;Bonny要付给Sly peter的最少的葡萄干的数目。

评分规则 有25分的评测数据,n,m<=7。

\(\color{#0066ff}{输入样例}\)

2 3
2 7 5
1 9 5   

\(\color{#0066ff}{输出样例}\)

77

\(\color{#0066ff}{数据范围与提示}\)

1<=n,m<=50 巧克力两条边上小块的数目
1<=k,p<=1,000 第kth行第pth列的小块上的葡萄干数目

\(\color{#0066ff}{题解}\)

一看这题,先搜索暴力有25pts,然后发现可以记忆化,然后。。。就A了。。这。。。

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
LL in() {char ch; LL x = 0, f = 1;while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));return x * f;
}
template<class T> bool chkmax(T &a, const T &b) { return a < b? a = b, 1 : 0; }
template<class T> bool chkmin(T &a, const T &b) { return b < a? a = b, 1 : 0; }
const int inf = 0x7fffffff;
const int maxn = 1050;
int n, m;
int s[maxn][maxn], f[55][55][55][55];
int getsum(int x, int y, int xx, int yy) {return s[xx][yy] - s[x - 1][yy] - s[xx][y - 1] + s[x - 1][y - 1];
}
int work(int x, int y, int xx, int yy) {if(f[x][y][xx][yy]) return f[x][y][xx][yy];if(x == xx && y == yy) return 0;int ans = inf;for(int i = x; i < xx; i++) chkmin(ans, work(x, y, i, yy) + work(i + 1, y, xx, yy));for(int i = y; i < yy; i++) chkmin(ans, work(x, y, xx, i) + work(x, i + 1, xx, yy));return f[x][y][xx][yy] = ans + getsum(x, y, xx, yy);
}
int main() {n = in(), m = in();for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + in();printf("%d\n", work(1, 1, n, m));return 0;
}

转载于:https://www.cnblogs.com/olinr/p/10685427.html

P4850 [IOI2009]葡萄干raisins 记忆化搜索相关推荐

  1. 记忆化搜索 day48

    今天听完派队的教学 感觉又可以水几道紫题了 好耶✌ 不过想起ygg提到的记忆化搜索 自己其实也是没有搞懂的 还是去做了几道题吧 P2476 [SCOI2008]着色方案 紫题喵 最开始想的是一个这样的 ...

  2. 洛谷P1057 传球游戏(记忆化搜索)

    点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...

  3. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)

    题目链接 题目大意: q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],m ...

  4. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]

    题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...

  5. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  6. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

  7. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  8. [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)

    P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...

  9. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

最新文章

  1. Windows下Go语言的安装和运行
  2. 数据科学家技能地铁图
  3. 接口里面的方法都是抽象方法吗_单元格区域选取,竟然有这么多种方法,你都造吗?...
  4. spring中的jdk动态代理(代码步骤)
  5. python 组合数库函数_Python数据分析之Numpy库(笔记)
  6. linux 使用退格键时出现^H解决方法
  7. 如何在CentOS 5.5上安装Kippo蜜罐
  8. 启动Tomcat服务时,出现org.apache.catalina.startup.VersionLoggerListener报错
  9. 个人量化策略整理_较好
  10. 【CSS】虎躯一震!flex=1 和 flex-grow=1 竟然不一样!
  11. VisualBox 克隆CentOS 7.6 后,ip,源,禁止root远程登录,主机,防火墙,ssh密钥登录
  12. 课程设计旅游景点咨询系统
  13. tree 先序遍历 叶子结点_编程:按先序序列输出二叉树的叶子结点
  14. 运维中常用Linux命令及运维工具
  15. 21种常见产品的电磁兼容检测项目与检测标准
  16. 无法连接虚拟设备ide1:0,因为主机上没有相应的设备。您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?
  17. 虚拟服务器有没有加入bt端口,三分钟学会架设BT服务器
  18. 3D打印云平台在线显示
  19. STM32(1)跑马灯
  20. MySQL数据库——索引机制及其优化

热门文章

  1. originpro2021导入excel(.xls)
  2. R语言:优雅、卓越的统计分析及绘图环境
  3. TL-WR740N_V4板TTL刷机指南_TFTP
  4. 2020年日历电子版(打印版)_2020年日历表(竖版-A4纸打印版)
  5. Vmotion迁移要求
  6. c语言vb考试试题,湖南省计算机二级VB以及C语言考试(OFFICE部分基础选择题)
  7. Txilm Protocol: Monoxide公链系统中的区块压缩算法
  8. idea中tomcat项目修改Module名之后修改配置信息
  9. Maven手工安装jar包到本地仓库
  10. 钱多多第二阶段冲刺03