链接:https://ac.nowcoder.com/acm/problem/210249
来源:牛客网

题目

在一个凹槽中放置了\ n n 层砖块,最上面的一层有\ n n 块砖,第二层有\ n-1 n−1块,……最下面一层仅有一块砖。第 \ i i 层的砖块从左至右编号为1,2,\dots i1,2,…i,第i层的第j块砖有一个价值a[i,j](a[i,j]\leq 50)a[i,j](a[i,j]≤50)。下面是一个有5层砖块的例子:

如果你要敲掉第 \ i i层的第 \ j j 块砖的话,若 \ i=1 i=1,你可以直接敲掉它,若\ i>1 i>1,则你必须先敲掉第 \ i-1 i−1 层的第j和第\ j+1 j+1 块砖。
你的任务是从一个有n(n\leq 50)n(n≤50)层的砖块堆中,敲掉 (m\leq 500)(m≤500)块砖,使得被敲掉的这些砖块的价值总和最大。

解析

要选 a [ i ] [ j ] a[i][j] a[i][j]那么至少要选 a [ i − 1 ] [ j + 1 ] a[i-1][j+1] a[i−1][j+1]
所以对于每个 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]打完了第i行j列的那块砖,一共打了k块砖

d p [ i ] [ j ] [ k ] = m a x ( d p [ l ] [ j + 1 ] [ k − i ] + p r e [ i ] [ j ] , d p [ i ] [ j ] [ k ] ) ; ( i − 1 < = l < = n − j ) dp[i][j][k] = max(dp[l][j+1][k-i] + pre[i][j],dp[i][j][k]); (i-1 <= l <= n - j) dp[i][j][k]=max(dp[l][j+1][k−i]+pre[i][j],dp[i][j][k]);(i−1<=l<=n−j)
其中
p r e [ i ] [ j ] pre[i][j] pre[i][j]表示第j列第1行到第i行的砖块分数和

注意状态转移过程中
0 < = i < = n − j + 1 0 <= i <= n - j + 1 0<=i<=n−j+1

为啥i = 0 也要更新?因为存在最优解,第j列一块砖块都不打,但是j + x列,和j - y列打了的情况,所以要求dp[0][j][k]把的值,把值传递到j - y列

洛谷中这道题砖块数范围更大,dp数组开大点就行了

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 55;
ll dp[N][N][502];ll a[N][N];
ll pre[N][N];//前缀和int main(){memset(dp, 0x8f, sizeof dp);//每个字节都是0x8f,所以dp[i][j][k]一定都是负数int n,m;    cin >> n >> m;for(int i = 1; i <= n; ++i)for(int j = 1; j <= n + 1 - i; ++j)cin >> a[i][j];for(int i = 1; i <= n; ++i)for(int j = 1; j <= n + 1 - i; ++j)pre[i][j] = pre[i-1][j] + a[i][j];dp[0][n + 1][0] = 0;for(int j = n; j; --j)for(int i = 0; i <= n - j + 1; ++i)// 为啥i = 0 也要更新?要考虑 第j列一个都不选的情况,需要通过dp[0][j][l]把值传递过去for(int k = i*(i + 1)/2; k <= m; ++k){ll t = -1e9;for(int l = max(i - 1,0); l <= n + 1 - (j + 1); ++l)t = max(t,dp[l][j + 1][k-i]);dp[i][j][k] = max(t + pre[i][j],dp[i][j][k]);}ll ans = 0;for(int i = 1; i <= n; ++i)for(int j = 1; j <= n - i + 1 ; ++j)ans = max(ans,dp[i][j][m]);cout << ans ;return 0;
}

打砖块(brike)相关推荐

  1. Python游戏开发,pygame模块,Python实现打砖块小游戏

    前言: 本期我们将利用python制作一个打砖块小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdjcY4gn-16 ...

  2. c语言 打砖块,打砖块

    打砖块游戏 问题分析: 需要做哪些模块 绘制砖块与小球 绘制木板,木板用键盘控制 物理引擎,小球的运动以及小球的反射 消除砖块 回顾一下图形绘制的基础知识 /********************* ...

  3. echarts树点击label事件_ECharts 堆积木(砖块)游戏

    最近突发奇想,用 3D 的堆叠柱图,做了一个搭积木的小游戏. 主要思路 用一个几乎透明的 series-bar3D 铺满整个 grid3D,作为操作区,监听鼠标点击事件.完成堆积木的操作: 用多层数据 ...

  4. python小游戏代码大全-Python实现打砖块小游戏代码实例

    这次用Python实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的继承2.碰撞检测的数学模型 知识点稍后再说,我们先看看游戏的效果和实现: 一.游戏效果 二 ...

  5. 俄罗斯方块游戏笔记(一)——砖块样式配置窗体

    一.砖块样式配置窗体 第一步 双击lbl的paint事件 第二步 双击lblMode的MouseClick 自定义界面反思: 要想改变Label的大小,AutoSize属性必须改. 不能在第一步后将G ...

  6. RL之DQN:基于TF训练DQN模型玩“打砖块”游戏

    RL之DQN:基于TF训练DQN模型玩"打砖块"游戏 目录 输出结果 设计思路 训练过程 输出结果 1.test01 2.test02 设计思路 训练过程 后期更新--

  7. 项目: 用easyx实现消砖块

    目录 一.最终效果展示 二.绘制静态的挡板 三.控制挡板 四.消砖块 五.鼠标交互 一.最终效果展示 效果图如下: 这个项目还是有很多的细节漏洞的.例如: 边界控制这里还是有点问题的. 二.绘制静态的 ...

  8. 项目: 用数组实现反弹球消砖块

    项目:用数组实现反弹球消砖块 一.效果展示: 二.代码如下: 一.效果展示: 二.代码如下: #include<stdio.h> #include<string.h> #inc ...

  9. 项目: 用函数实现反弹球消砖块

    目录 一.项目描述和最终的成果展示 二.封装后的弹跳小球 三.显示移动挡板 四.反弹小球 五.添加砖块并实现打砖块操作 一.项目描述和最终的成果展示 这是在上一次弹跳小项目上进行了一系列的优化和封装. ...

最新文章

  1. Android系统Google Maps开发实例浅析
  2. MT-Retina.js
  3. 一部手机是否能用 7 年?苹果、三星、Google:三年差不多!
  4. php按照二维数组某个字段排序,PHP 二维数组根据某个字段排序
  5. Go内存管理之代码的逃逸分析
  6. sklearn.preprocessing之数据预处理
  7. 强大的.NET反编译工具Reflector及插件 (转)
  8. Java异步多线程编程探索之CompletableFuture
  9. filezilla linux服务器端,FileZilla Server安装配置教程
  10. 为什么说数据不动代码动?移动计算比移动数据更划算?
  11. 二頌(金火互易過程)
  12. 关闭windows电脑 ctrl +alt +方向键旋转屏幕快捷键
  13. C++ 的图形界面(UI)库
  14. 在M文件中使用模糊工具箱fis文件
  15. 怎么注册公司邮箱?公司邮箱注册流程介绍
  16. 场效应晶体管在电路中的五大作用,你了解哪一种?
  17. 懂得放弃,才会拥有!
  18. YouTube 创始人陈士骏,成立了一支由 AI 决策的对冲基金
  19. 2016 google machine translation 英译中
  20. Linux 系统黑洞 /dev/null

热门文章

  1. 入职体检时为什么要检查血常规
  2. GUC-10 线程八锁
  3. 大白话讲解JDK源码系列:从头到尾再讲一遍ThreadLocal
  4. ERP项目文档--想到用时方恨少
  5. 巨人网络纽交所上市揭幕 市值将望超过盛大网易
  6. matlab 工具箱查询,matlab常用工具箱、函数查询及相关应用
  7. wordpress主题html5,Salutation 强大的HTML5商务WordPress主题集成BuddyPress[更新至v3.0.7]
  8. OpenStack_Rocky版-8.安装Dashboard面板服务
  9. 基于rabbitmq延迟插件实现分布式延迟任务
  10. 宝马335i手动挡和M3手动挡的对比