有两种类型的物品:普通物品和魔法物品。普通物品没有魔法属性,而魔法物品拥有一些魔法属性。每种普通物品有一个价值P,但每种魔法物品有两种价值:鉴定前的价值P。和鉴定后的价值P2(当然,P2总是大于P。)。

为了鉴定一个魔法物品,你需要购买一个鉴定卷轴,用它来鉴定魔法物品。鉴定完一件魔法物品以后,鉴定卷轴便会消失。每个鉴定将会消耗Pi元钱,如果没有足够的钱,你将无法购买任何鉴定卷轴。

现在,你正在一个集市中,同时拥有很多物品。你知道每件物品的价值并且想要出售全部物品。那么,你最多能够获得多少钱呢?

你可以假定:

★开始的时候你没有钱。

★所有的魔法物品都还没有被鉴定。

★只要你有足够的钱,你可以购买任意多的鉴定卷轴。

输入magic.in

第一行有两个整数N和Pi(0<Pi≤5000),表示你拥有的物品数和一个鉴定卷轴价格。

接下来N行,每行给出一件物品的价格。

对于每件普通物品,那一行仅有一个整数P(0<P≤10000)。

对于每件魔法物品,那一行将会有两个整数P1和P2(0<P1<P2≤10000)。

输出magic.out

一个整数表示你最多能够获得多少钱。

样倒输入

2 10

10

20 100

样例输出

100

数据规模

对于30%的数据N≤50;

对于100%的数据N≤1000。

[解析]:对于题目中的普通物品和鉴定前价格加上鉴定费用大于等于鉴定后价格的物品可以直接卖掉。对于剩下的物品,只要能够买得起一个鉴定卷轴就可以把所有的物品都鉴定完。    那么问题就转化为用最小的损失凑足一个鉴定卷轴的钱,直接01背包即可。

 参考程序
Var p1,p2,f : array [..]of longint;
c:array[..]of boolean;
n,k,pi,i,j,sum,ss:longint;
begin
assign (input,'magic.in'); reset(input);
assign(output,'magic.out');rewrite(output);
readln(n,pi);
for i:= to n do begin
read(p1[i]);
inc(ss,p1[i]);
if not eoln then begin
readln(p2[i]);
p2[i]:=p2[i]-Pi-p1[i];
if p2[i]> then inc(sum,p2[i]+p1[i])
else begin
p2[i]:=;inc(sum,p1[i]);
end;
end
else begin
readln;
inc(sum,p1[i]);
end;
end;
c[]:=true;
for i:= to pi do f[i]:=maxlongint;
if ss<pi then begin
writeln(ss);
Close(output);halt;
end;
for j:= to n do for i:=pi- downto do
if c[i] then begin
k:=i+p1[j];
if k>pi then k:=Pi;
if f[i]+p2[j]<f[k] then begin
f[k]:=f[i]+p2[j];C[k]:=true;
end;
end;
writeln(sum-f[pi]);
close(output);
end.

考试时错误的算法:

 var
n,p,i,j,kongge,money,m,n1,ans:longint;
p1,p2:array[..] of longint;
s:array[..] of string;
f:array[..,..] of longint;
function max(x,y:longint):longint;
begin
max:=x;
if x<y then max:=y;
end;
begin
assign(input,'magic.in');
reset(input);
assign(output,'magic.out');
rewrite(output);
n1:=;
readln(n,p);
for i:= to n do
begin
readln(s[i]);
kongge:=pos(' ',s[i]);
if kongge= then
begin
val(s[i],money);
inc(m,money);
end
else begin
inc(n1);
val(copy(s[i],,kongge-),p1[n1]);
val(copy(s[i],kongge+,),p2[n1]);
end;
end;
ans:=;
for i:= to do f[,i]:=m;
for i:= to n1 do
for j:= to do
begin
if f[i-,j+]-p>= then
f[i,j]:=max(f[i-,j+]-p+p2[i],f[i-,j]+p1[i]);
if f[i,j]>ans then ans:=f[i,j];
end;
writeln(ans);
close(input);
close(output);
end.

魔法物品(magic.pas/c/cpp)的更多相关文章

  1. NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)

    7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] ...

  2. U68641 划水(swim.pas/c/cpp)

    U68641 划水(swim.pas/c/cpp) 题目背景 小小迪带你划水. 题目描述 原题 输入输出格式 输入格式: 第一行一个数 T. 接下来 T 行每行一个数表示 n 输出格式: 输出 T 行 ...

  3. 纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)

    1566. 幸运锁(lucky.pas/c/cpp) 题目描述 有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0).幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间 ...

  4. EX14 彩票中奖 (lottery.pas/c/cpp)

    [题目描述]小明想试试运气去购买彩票,所以他开始研究彩票大乐透的玩法:超级大乐透是指由购买者从01—35共35个号码中选取5个号码为前区号码,并从01—12共12个号码中选取2个号码为后区号码组合为一 ...

  5. QQ 数(number.pas/c/cpp)——莫比乌斯函数

    题目 [问题描述] 企鹅国数学家 QQ 潜心研究数论,终于发现了一个简单的数论问题! 一个 QQ 数定义为一个拥有一个大于 $ 1 $ 的完全平方数为因子的数字,一个数字的 QQ 值定义为这个数是 Q ...

  6. 【提高组NOIP2008】双栈排序 (twostack.pas/c/cpp)

    [题目描述] Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈 ...

  7. 浅谈分治算法在OI中的应用

    分治虽然是基本思想,但是OI中不会出裸分治让你一眼看出来,往往都是结合到找规律里面. 先来个简单的: 奇妙变换 (magic.pas/c/cpp) [问题描述]   为了奖励牛牛同学帮妈妈解决了大写中 ...

  8. noip模拟赛(一)魔法树

    魔法树 (mahou.pas/c/cpp) [问题描述] 魔法使moreD在研究一棵魔法树. 魔法树顾名思义,这货是一棵树,奇葩的是魔法树上的每一条边都拥有一个魔法属性,如果不那么奇葩就不是moreD ...

  9. TYVJ P3407 佳佳的魔法照片 Label:语文很重要 语文很重要 语文很重要

    描述 佳佳的魔法照片(mphoto.pas\c\cpp) [题目背景] 佳佳的魔法照片(Magic Photo):如果你看过<哈利•波特>,你就会知道魔法世界里的照片是很神奇的.也许是因为 ...

随机推荐

  1. virtual box 故障修复

    vmware ,virtual box等虚拟化环境为一台系统同时允许运行多台系统成为可能准备了技术支持. 通过软件化的平台虚构出硬件设备的驱动,可谓虚拟化技术应用非常广泛. 在平常的虚拟机启动过程中经 ...

  2. Yaf学习(二)----Yaf初体验

    1.hello world 1.1 用yaf输出hello world 1.首先配置host,nginx 2.host不用多说,指向虚拟机IP即可 1.2 重点说一下nginx (只说server块) ...

  3. python-三级菜单的优化实现

    三级菜单需求: 1.可依次选择进入各子菜单 2.可从任意一层往回退到上一层 3.可从任意一层退出程序 所需新知识点:列表.字典 先通过字典建立数据结构 #创建字典 city_dic = { " ...

  4. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  5. 内存泄漏导致程序killed

    示例程序: #include<stdio.h> #include<unistd.h> int main() { ) { *]; } ; } 执行结果: 程序消耗完内存会被kil ...

  6. go学习笔记-基础类型

    基础类型 布尔值 布尔值的类型为bool,值是true或false,默认为false. //示例代码 var isActive bool // 全局变量声明 var enabled, disabled ...

  7. 动态规划----FatMouse’s Speed(HDU 1160)

    参考:https://blog.csdn.net/u012655441/article/details/64920825 https://blog.csdn.net/wy19910326/articl ...

  8. asp.net MVC+easyUI 文件上传

    前言:公司前端都是index页面引用js,剩下的添加...都是html页.加大操作难度5555,所以就是主页面操作子页面上传.效果如下: 1,前端html页代码如下 .其中请注意,form中encty ...

  9. java Vector向量

    9.3.4 Vector向量 [专业IT培训机构,真正零首付入学www.bjsxt.com] Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”. 比如,ind ...

  10. 创龙DSP6748开发板驱动LCD屏

    1. DSP6748内部有2个LCD控制器,Raster Controller 光栅控制器和the LCD Interface Display Driver (LIDD) controller 控制器 ...