Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

小X来到一个雄奇的金字塔挖宝,但是这是一座被诅咒的金字塔,小X必须马上逃离这里,否则小X就会被埋在金字塔里,但他不希望此行落空。 

现在小X面前有N+1种财宝,每种财宝都有一个价值。第一种财宝重量为0,第二种财宝重量为1,总之第I种财宝重量为I-1。现在小X希望

拿走N+M个物品,但是这M+N个物品总重量不能超过N。小X希望能获得最大的价值。你能帮帮他吗?

由于金字塔跟小X一样牛,所以每种财宝无限个。

【输入格式】

第一行两个正整数N,M 第二行N+1个整数,第I个整数代表了第I种财宝的价值

【输出格式】

一个数,表示最大利润。

【数据规模】

10%满足N,M<=10 40%满足N,M<=100 100%满足 N,M<=3000 abs(财宝价值)<=1000

Sample Input1

5 3
4 7 2 5 -3 6

Sample Output1

47

【题解】

这题有两个很烦人的地方,一个是m+n个物品的限制。一个是重量为0的物品。

我们要怎么去除掉这个问题呢。

首先考虑一下最后我们选取的物品。

因为规定了要选m+n个物品。如果不选重量为0的物品可能会出现选不够的问题。

因此必然是掺杂着重量为0和重量不为0的物品。设为x,y.

设重量为0的物品下标为0,重量不为0的物品下标为1..n;

c是物品价值数组,w是物品的重量数组。

最后的答案 == x*c[0] + y*c[0] +∑(c[i]) - y*c[0]  (其中的求和为所选出的最优的y个有重量的物品的价值的和);

但是先别急着划掉两个y*c[0];

我们合并一下。ans == (x+y)*c[0] + ∑(c[i]) - y*c[0];

其中x+y==n+m;

ans == (n+m)*c[0] +
∑(c[i]) - y*c[0];

其中左边绿色部分为常量,右边为需要求的量。

因为∑(c[i])一共求和了y(未知)个c[i],则可以再化一下。

ans == 常量 + ∑(c[i]-c[0]) i∈【1,n】

这下问题就变成求物品重量为w[i],价值为c[i]-c[0]的完全背包问题了。

右边最大则ans最大。

还有一个优化的方法。即如果c[i]-c[0]是小于0的,那么这个物品就不要了。

因为如果c[i]比c[0]还小,那么拿不用重量的物品来替代i物品肯定最优。(c[0]不用消耗重量!)

【代码】

#include <cstdio>

int n,m,temp,num = 0,f[3011],w[3011],c[3011];

void input_data()
{
scanf("%d%d",&n,&m);
scanf("%d",&temp); //读入c[0]
for (int i = 1;i <= n;i++)
{
int x;
scanf("%d",&x);
x -= temp; //输入第i个物品的价值,先减去c[0]
if (x > 0) //如果减去后还大于0则这个物品是可能在y个物品中的。
{
num++;
w[num] = i;
c[num] = x;
}
}
} void get_ans()
{
for (int i = 1;i <= num;i++) //对c[i]-c[0] (i∈[1..n]) 进行完全背包的过程
for (int j = w[i];j <= n;j++)
if (f[j] < f[j-w[i]] + c[i])
f[j] = f[j-w[i]] + c[i];
} void output_ans()
{
printf("%d",f[n] + (n+m)*temp); //最后输出f[n]的时候还要加上被减去的y个c[0]。以及x个c[0];
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}

【t038】&&【u214】金字塔的更多相关文章

  1. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  2. 在Excel中制作金字塔条形图

    使用场景:一项市场调查研究中,男性和女性.赞同和反对.满意和不满意的两方面的消费者,他们在某些项目上的指标分布特性一项产品组合决策中,乐观场景和悲观场景下各产品的获利情况一个产品试销活动中,不同门店渠 ...

  3. SIFT中的尺度空间和传统图像金字塔

    SIFT中的尺度空间和传统图像金字塔 http://www.zhizhihu.com/html/y2010/2146.html 最近自己混淆了好多概念,一边弄明白的同时,也做了一些记录,分享一下.最近 ...

  4. Atitit 图像金字塔原理与概率 attilax的理解总结qb23

    Atitit 图像金字塔原理与概率 attilax的理解总结qb23 1.1. 高斯金字塔  (  Gaussianpyramid): 拉普拉斯金字塔 (Laplacianpyramid):1 1.2 ...

  5. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...

  6. Spatial pyramid pooling (SPP)-net (空间金字塔池化)笔记(转)

    在学习r-cnn系列时,一直看到SPP-net的身影,许多有疑问的地方在这篇论文里找到了答案. 论文:Spatial Pyramid Pooling in Deep Convolutional Net ...

  7. php——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等

    1.半金字塔 $n=5; //控制层数 for($i=1;$i<=$n;$i++){ //控制每层的 “*” 数 for($j=1;$j<=$i;$j++){ echo  "*& ...

  8. JAVA WEB 的JSP(9*9乘法表+*型金字塔)

    运行环境及工具: (Tomcat7) + (JAVA JDK)+ (Eclipse for J2EE) 输出9*9乘法表 代码片段的练习 增加一些简单的JS功能 <%@ page import= ...

  9. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

    腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...

随机推荐

  1. 【agc004f】Namori Grundy

    那个问一下有人可以解释以下这个做法嘛,看不太懂QwQ~ Description 有一个n个点n条边的有向图,点的编号为从1到n. 给出一个数组p,表明有(p1,1),(p2,2),…,(pn,n)这n ...

  2. CF981C(菊花图)

    题目描述 RAMESS知道很多关于树的问题(无循环的无向连通图)! 他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助! 划分是从树上的边中分裂出一些简单的路径,使得每个两条路径 ...

  3. Dia Diagram Editor(流程图、UML)免费开源绘图软件

    近期工作各种繁忙,导致很少分享自己喜欢和常用的一些工具,今天有点时间再次给各位喜欢开源的小伙伴介绍一个好用.免费.开源的软件Dia Diagram Editor. 首先给大家看看这个软件的主界面吧! ...

  4. PHP取不定个数数组交集

    最近有个需求,有一个N个二维数组,N是动态的,不固定个数,现需取这N个数组的交集内容. 用到的函数是array_intersect_assoc 用法 $result_arr = array_inter ...

  5. Unity C# 设计模式(五)建造者模式

    定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 组成部分: 1.Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪 ...

  6. Android设计模式(十二)--抽象工厂模式

    问题: 抽象工厂模式,是一个,狠恶心的模式,那么这个模式在Android有没实用到过呢? 1.定义: 抽象工厂模式:为创建一组相关或者是相互依赖的对象提供一个接口,而不须要指定他们的详细类. 2.使用 ...

  7. github关联域名,创建个人站点教程终结篇

    1.背景 近期心血来潮,买了一个域名,本来要买fuckgfw的,没想到被抢注了.就拿自己的英文名买了一个.叫做www.garvinli.com.由于知道会有非常多朋友不太清楚整个站点搭建的过程,所以在 ...

  8. 控制器不存在:app\admin\controller\Document

    控制器不存在:app\admin\controller\Document 报错: 控制器不存在:app\admin\controller\Document 但是我在代码里面找了半天没出现Documen ...

  9. HDU 4372 Count the Buildings 组合数学

    题意:有n个点上可能有楼房,从前面可以看到x栋楼,从后面可以看到y栋,问楼的位置有多少种可能. 印象中好像做过这个题,

  10. 《读书报告 – Elasticsearch入门 》----Part II 深入搜索(2)

    第十三章 全文检索 这一章开始介绍 全文检索 :怎样对全文字段(full-text fields)进行检索以找到相关度最高的文档. 全文检索最重要的两个方面是: 相关度(Relevance) 根据文档 ...