Codevs 1257 打砖块
1257 打砖块
在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖。第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[i,j](a[i,j]<=50)。下面是一个有5层砖块的例子。如果你要敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它,若i>1,则你必须先敲掉第i-1层的第j和第j+1块砖。
你的任务是从一个有n(n<=50)层的砖块堆中,敲掉(m<=500)块砖,使得被敲掉的这些砖块的价值总和最大。

你将从文件中读入数据,数据的第一行为两个正整数,分别表示n,m,接下来的第i每行有n-i+1个数据,分别表示a[i,1],a[i,2]……a[i,n – i + 1]。
输出文件中仅有一个正整数,表示被敲掉砖块的最大价值总和。
4 5
2 2 3 4
8 2 7
2 3
49
19
敲掉第一层的四块砖,再敲掉第二层的第一块砖,2+2+3+4+8=19
算法:考虑每一列的情况
- dp到第i列,这一列挖j个砖头,已经挖了s块:f[i][j][s]
 - 则可以得出状态转移方程
 - f[i][j][s]=max(f[i-1][l][s-j]) (0<=l<=j+1)
 - 举个例子,如果n=5,即有5列,挖的情况从第一列到第五列可以是
 - 32121或54321。。。。。。
 - (第i+1列的砖数)大于等于(第i列的砖数-1)
 
#include <cstdio>
#include <iostream> using namespace std; int n,m,a[][],f[][][]; int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=n-i+;j++){
cin>>a[i][j];
a[i][j]+=a[i-][j];
} for(int i=;i<=n+;i++)//第i列
for(int j=;j<=n+-i;j++)//挖j个砖头
for(int k=;k<=j+;k++)//上一列的砖头数
for(int s=j;s<=m;s++)//已经挖了s块砖头
f[j][i][s]=max(f[j][i][s],f[k][i-][s-j]+a[j][i]);
cout<<max(f[][n][m],f[][n+][m]);
}
Codevs 1257 打砖块的更多相关文章
- 打砖块(codevs 1257)
		
题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[ ...
 - 【codevs1257】 打砖块
		
http://codevs.cn/problem/1257/ (题目链接) 题意 在等腰三角形上打砖块,总共有m发炮弹,每块砖有一个权值,求打出的最大权值 Solution 今天考试题,考场上的2个小 ...
 - [HNOI2004]打砖块(敲砖块)
		
题目:codevs1257.洛谷P1437 题目大意:有一些砖块呈倒三角形状,每块砖敲掉后有一个分数.除第一行外,敲掉一块砖必须先把上面两块砖敲掉.现在你能敲m块砖,求能得到的最大分数. 解题思路:此 ...
 - [洛谷1437&Codevs1257]敲砖块<恶心的dp>
		
题目链接:https://www.luogu.org/problem/show?pid=1437#sub http://codevs.cn/problem/1257/ 不得不说,这个题非常的恶心,在初 ...
 - codevs 3289 花匠
		
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
 - codevs 1082 线段树练习 3(区间维护)
		
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
 - codevs 1285 二叉查找树STL基本用法
		
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
 - codevs 1576 最长上升子序列的线段树优化
		
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
 - codevs 1080 线段树点修改
		
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
 
随机推荐
- Java for LeetCode 124 Binary Tree Maximum Path Sum
			
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...
 - python获取当前的时间
			
打印出当前的年月日时分秒 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) 2018-09-05 09:39: ...
 - P5111 zhtobu3232的线段树
			
P5111 zhtobu3232的线段树 维护左子树右子树的贡献和跨区间贡献 #include<bits/stdc++.h> using namespace std; typedef lo ...
 - uploadify 报错 超过了最大请求长度
			
今天系统遇到了一个问题,上传4m以上的文件,uploadify就会报错:超过了最大请求长度. 开始我以为是设置的大小,可是后来我看了uploadify的fileSizeLimit=1024*10,也就 ...
 - 架构设计:系统间通信(34)——被神化的ESB(上)
			
1.概述 从本篇文章开始,我们将花一到两篇的篇幅介绍ESB(企业服务总线)技术的基本概念,为读者们理清多个和ESB技术有关名词.我们还将在其中为读者阐述什么情况下应该使用ESB技术.接下来,为了加深读 ...
 - 调用jersey发布的接口webservice,通过HttpPost传递文件
			
项目媒体文件之前都是上传到七牛云处理,现在客户为了安全和私密性,准备将移动端拍摄的图片和视频传递到文件服务器,所以就想办法能不能在服务器端发布一个WebService,供移动端调用.刚好之前做的接口都 ...
 - nginx日志输出参数记录
			
摘自: http://www.cnblogs.com/LoveJulin/p/5082363.html nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是 ...
 - matlab之find()函数
			
Find 这个函数用处也挺大的,这几天看很多程序都见到这一函数,今天要好好给阐述,了解下这个函数是为了找到矩阵或者是数组,向量中的非零元素.下面一大段英文没耐心看.看看例子就行了. 第一个用法是 nd ...
 - python之tkinter_1
			
以下内容来自:https://blog.csdn.net/wangyiyan315/article/details/16361065 from tkinter import * # 导入tkinter ...
 - Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引
			
Luke 5 发布,可视化 Lucene 索引查看工具 oschina 发布于2015年08月31日 这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch ...