题目描述

在一个凹槽中放置了 n 层砖块、最上面的一层有n 块砖,从上到下每层依次减少一块砖。每块砖

都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示。

14 15  4  3  23 33 33 76 2 2 13 11 22 23 31

如果你想敲掉第 i 层的第j 块砖的话,若i=1,你可以直接敲掉它;若i>1,则你必须先敲掉第

i-1 层的第j 和第j+1 块砖。

你现在可以敲掉最多 m 块砖,求得分最多能有多少。

输入输出格式

输入格式:

输入文件的第一行为两个正整数 n 和m;接下来n 行,描述这n 层砖块上的分值a[i][j],满足

0≤a[i][j]≤100。

对于 100%的数据,满足1≤n≤50,1≤m≤n*(n+1)/2;

输出格式:

输出文件仅一行为一个正整数,表示被敲掉砖块的最大价值总和。

输入输出样例

输入样例#1:

4 5
2 2 3 4
8 2 7
2 3
49

输出样例#1:

19

辣鸡到什么都不想写
如果我们设f[i][j][k]表示前i列正在第j行一共打了k次,我们会发现这个设法使有后效性的。
我们在dp的时候是会对后面产生影响的,而我们不可能记录状态(别说要状压);
所以我们要从后往前考虑,设f[i][j][k]表示已经打了后i列,正在第j行,一共打了k次的最大价值;
f[i][j][k] = max(f[i+1][t][k-j] + a[1][i]+...+a[j][i]),后面的那一堆我们可以用前缀和优化;
t的循环从j-1 ~ n-i;因为我们打到地下了,必须要把它之上的全部打通,所以j-1是下限,n-i是上限,
为什么是n-i而不是n-i+1?因为 ... n - (i + 1) + 1...
这也解释了后面的那么多的和是为什么。
然后这道题就抄会了...

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
inline int read()
{int res=0;char ch=getchar();bool fl=0;while(!isdigit(ch)){if(ch=='-')fl=1;ch=getchar();}while(isdigit(ch)){res=(res<<3)+(res<<1)+(ch^48);ch=getchar();}return fl?-res:res;
}int n, m, f[51][51][1250]; //从后往前第i列,第j个,打了k次
int a[51][51];int main()
{n = read(); m = read();for (register int i = 1 ; i <= n ; i ++) for (register int j = 1 ; j <= (n - i + 1) ; j ++)a[i][j] = read();int sum = 0;memset(f, -127, sizeof f);f[n+1][0][0] = 0;for (register int i = n ; i >= 1 ; i --){int sum = 0;for (register int j = 0 ; j <= n - i + 1 ; j ++){sum += a[j][i];for (register int k = j ; k <= m ; k ++){for (register int t = max(0, j - 1) ; t <= n - i ; t ++){f[i][j][k] = max(f[i][j][k], f[i+1][t][k-j] + sum);}}}}int ans=0;for (register int i = 1 ; i <= n ; i ++){for (register int j = 1 ; j <= n - i + 1 ; j ++){ans = max(ans, f[i][j][m]);}}cout << ans;return 0;
}

转载于:https://www.cnblogs.com/BriMon/p/9269527.html

[LUOGU1437] 敲砖块相关推荐

  1. 一个简单的敲砖块游戏

    练手用pygame做了一个简单到简陋的敲砖块游戏: import math from abc import ABCMeta, abstractmethod import pygameclass Gam ...

  2. [HNOI2004] 敲砖块(dp + 前缀和)

    P1437 [HNOI2004] 敲砖块 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考文章 [题解][HNOI2004]敲砖块 - gcd & Blog - 洛谷博客 ...

  3. yzoj P2343 洛谷 P1437 [HNOI2004]敲砖块

    题意 在一个凹槽中放置了N层砖块,最上面的一层油N块砖,从上到下每层一次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如图所示. 如果你想敲掉第i层的第j块砖的话,若i=1,你可以直接 ...

  4. 12 个最佳的免费学习编程的游戏网站【转】

    转自:http://blog.csdn.net/jxgz_leo/article/details/52767185 本文导航 -CodinGame -Code Combat -Screeps -Che ...

  5. 基于java的打砖块游戏_cocos creator 制作的打砖块游戏

    简介cocos creator1.10.2版本制作, 使用了cocos creator中的物理引擎与碰撞系统 进入游戏, 可以看到游戏分为两种模式, 经典模式和挑战模式 挑战模式可普通的敲砖块游戏一样 ...

  6. python能做什么游戏-有趣又好玩的9个Python编程小游戏、简直太棒了

    打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...

  7. 12 个最佳的免费学习编程的游戏网站

    本文导航 -CodinGame -Code Combat -Screeps -Check iO -Vim Adventures -Cyber DoJo -Code Monkey -Elevator S ...

  8. 12个最佳的免费学习编程的游戏网站

    在这篇文章中,我们对 200 多个编程游戏网站的各个方面进行了评估,包括是否免费.是否自由开源.是面对菜鸟还是有经验的程序员.支持的编程语言等等,然后遴选出这 12 个上佳的免费的编程游戏网站,希望能 ...

  9. 15 个边玩游戏边学编程的网站(包含 Python)

    前言 经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程? 今天我想跟大家分享几个网站,教你如何通过 ...

最新文章

  1. plasma桌面设置好的面板消失了_Ubuntu Studio 将用 KDE Plasma 桌面环境替换 Xfce | Linux 中国...
  2. 让word不显示计算机名作者,如何使word在其他电脑上也不显示回车符
  3. Long-read sequencing for improved analysis
  4. 【TP3.2】模板 select选项采坑
  5. [UML]UML系列——类图class的关联关系(聚合、组合)
  6. 科大星云诗社动态20210508
  7. S/4HANA生产订单的标准状态和透明工厂原型状态的映射
  8. 深入学习SpringMVC以及学习总结
  9. C++ 时间操作(获取毫秒级)【转】
  10. 使用windbg 检查c++程序死锁
  11. matlab的金融分析工具,金融分析利器之 MATLAB空间计量工具箱
  12. 使用C语言输出菱形详解
  13. 安装科来-csnas_tech_12.0.5.12506_x64
  14. cpp封装dll和so,cpp调用so
  15. 计算机安装win10系统还原,解决win10电脑一键还原教程
  16. 【科普】气垫船是如何浮在水面上行驶的
  17. Eclipse 使用中一些好用的快捷键
  18. 计算机控制系统2017模拟题,计算机控制系统模拟试题.doc
  19. 【教程】Edraw Max(亿图图示)案例:产品经理如何用亿图绘制流程图?
  20. 简单理解TCP三次握手四次挥手(看一遍你就懂)

热门文章

  1. python怎么让py里面逐行运行_[python]开发环境bug(求助)
  2. SQLi LABS Less 17 报错注入
  3. Win7登录时出现Group policy client 未启动无法登陆问题的解决方法
  4. BeautifulSoup4 find_all搜索包含指定文本内容的标签返回空list的问题
  5. macbook里软件打不开说是没有权限
  6. 基于IP子网将加域的电脑移动到不同的OU
  7. 使用WITH AS提高性能简化嵌套SQL
  8. [c#]获取exchange中的图片
  9. (转载)Cocos2dx-OpenGL ES2.0教程:初识MVP(3)
  10. Iperf 源代码分析(四)