当前位置:网站首页>LeetCode 2312. Sell Wood Blocks
LeetCode 2312. Sell Wood Blocks
2022-08-02 07:49:00 【HumbleFool】
LeetCode 2312. 卖木头块
暴力递归 TLE
const int N = 210;
typedef long long LL;
class Solution {
public:
int price[N][N] = {
0};
LL dfs(int n, int m)
{
if(n == 0 || m == 0)
return 0;
//The whole piece is not separated
LL p1 = price[n][m];
// 按行分
LL p2 = 0;
for(int i = 1; i < n; i ++)
{
LL up = dfs(i, m);
LL down = dfs(n - i, m);
p2 = max(p2, up + down);
}
// 按列分
LL p3 = 0;
for(int i = 1; i < m; i ++)
{
LL left = dfs(n, i);
LL right = dfs(n, m - i);
p3 = max(p3, left + right);
}
return max(p1, max(p2, p3));
}
long long sellingWood(int n, int m, vector<vector<int>>& prices) {
// A two-dimensional table stores prices
for(auto&& p : prices)
price[p[0]][p[1]] = p[2];
return dfs(n, m);
}
};
记忆化搜索 AC
const int N = 210;
typedef long long LL;
class Solution {
public:
int price[N][N] = {
0};
LL f[N][N];
LL dfs(int n, int m)
{
// 0行或者0列
if(n == 0 || m == 0)
return 0;
// 记忆化
if(f[n][m] != -1)
return f[n][m];
//The whole piece is not separated
LL p1 = price[n][m];
// 按行分
LL p2 = 0;
for(int i = 1; i < n; i ++)
{
LL up = dfs(i, m);
LL down = dfs(n - i, m);
p2 = max(p2, up + down);
}
// 按列分
LL p3 = 0;
for(int i = 1; i < m; i ++)
{
LL left = dfs(n, i);
LL right = dfs(n, m - i);
p3 = max(p3, left + right);
}
f[n][m] = max(p1, max(p2, p3));
return f[n][m];
}
long long sellingWood(int n, int m, vector<vector<int>>& prices) {
// 2D record price
for(auto&& p : prices)
price[p[0]][p[1]] = p[2];
memset(f, -1, sizeof f);
return dfs(n, m);
}
};
Elegant dynamic programming
const int N = 210;
typedef long long LL;
class Solution {
public:
LL f[N][N] = {
0}; //表示i行jThe maximum block size of the column
long long sellingWood(int n, int m, vector<vector<int>>& prices) {
// 初始化
for(auto&& p : prices)
f[p[0]][p[1]] = p[2];
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
{
// 按行分割
for(int k = 1; k <= (i >> 1); k ++)
f[i][j] = max(f[i][j], f[k][j] + f[i - k][j]);
// 按列分割
for(int k = 1; k <= (j >> 1); k ++)
f[i][j] = max(f[i][j], f[i][k] + f[i][j - k]);
}
return f[n][m];
}
};
边栏推荐
猜你喜欢
optional
FaceBook社媒营销高效转化技巧分享
Unity Shader学习(七)纹理图像的简单使用
Xilinx约束学习笔记—— 时序约束
【CNN回归预测】基于matlab卷积神经网络CNN数据回归预测【含Matlab源码 2003期】
PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
“蔚来杯“2022牛客暑期多校训练营4,签到题NDKHL
【故障诊断分析】基于matlab FFT轴承故障诊断(包络谱)【含Matlab源码 2002期】
[21天学习挑战赛——内核笔记](一)——设备树的概述(硬件、目标、效果、文件类型)
企业实训复现指导手册——基于华为ModelArts平台的OpenPose模型的训练和推理、基于关键点数据实现对攀爬和翻越护栏两种行为的识别、并完成在图片中只标注发生行为的人
随机推荐
张驰课堂:六西格玛测量系统的误差分析与判定
【ROS基础】rosbag 的使用方法
OC-NSNumber and NSValue are generally used for boxing and unboxing
【故障诊断分析】基于matlab FFT轴承故障诊断【含Matlab源码 2001期】
初探形式化方法基本原理
【机器学习】实验2布置:基于回归分析的大学综合得分预测
Swagger的简单介绍,集成,以及如何在生产环境中关闭swagger,在测试和开发环境中自动打开
查找最大的n个文件
docker 安装mysql
【图像去噪】基于matlab双立方插值和稀疏表示图像去噪【含Matlab源码 2009期】
条件构造器~wapper
线程的创建方式
SQL server 2014 怎么一次性导出多个查询结果?
实例028:递归求等差数列
【杂】pip换国内源教程及国内源地址
新产品立大功 伟世通第二季度营收双增
Agile, DevOps and Embedded Systems Testing
结构体大小计算--结构体内存对齐
FaceBook社媒营销高效转化技巧分享
SimpleChannelInboundHandler使用总结