JZOJ_3223. 【HBOI2013】Ede的新背包问题 (Standard IO)

Description

   “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎么的心情。能不能说给我听。”

  失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌。

  记忆中,她总是喜欢给Eden出谜题,在valentine‘s day的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值、价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情款下,如何选择买哪些玩偶以及每个玩偶可以买多少个,才能使得选择的玩偶总价钱不超过m,且价值和最大。

  众所周知的,这是一个很经典的多重背包问题,Eden很快解决了,不过她似乎因为自己的问题被飞快解决感到了一丝不高兴,于是她希望把问题加难:多次询问,每次询问都将给出信的总价钱,并且会去掉某个玩偶(及这个玩偶不能被选择),再问此时的多重背包的答案(即前一段所叙述的问题)。

  这下Eden犯难了,不过Eden不希望自己被难住,你能帮帮他么?

Input

  从文件bag.in看读入数据。

  第一行一个数n,表示有n个玩偶,玩偶从0开始编号。

  第二行开始后面的n行,每行三个数ai,bi,ci,分别表示买一个第i个玩偶需要的价钱,获得的价值以及第i个玩偶的限购次数。

  接下来的一行为q,表示询问次数。

  接下来q行,每行两个数di,ei表示每个询问去掉的是哪个玩偶(注意玩偶从0开始编号)以及该询问对应的新的总价钱数。(去掉操作不保留,即不同询问互相独立)

Output

  输出 q行,第 i行输出对于第 i个询问的答案。

Solution

  先预处理出f1[i,j],为前i个物品,用了j钱的最大价值, 
  同理我们再预处理出f2[i,j],为i到n个物品,用了j钱的最大价值。 
  于是对于每次询问,我们可以枚举z,求max(f1[x-1,z]+f2[x+1,y-z])即可。 

代码

 1 var
 2   n,m,ans:longint;
 3   a,b,c:array [0..1001] of longint;
 4   f1,f2:array [0..1001,0..1001] of longint;
 5 function max(o,p:longint):longint;
 6 begin
 7   if o>p then exit(o);
 8   exit(p);
 9 end;
10
11 procedure init;
12 var
13   i,j,k:longint;
14 begin
15   readln(n);
16   for i:=1 to n do
17     readln(a[i],b[i],c[i]);
18   for i:=1 to n do
19     for j:=1000 downto 0 do
20       begin
21         f1[i,j]:=f1[i-1,j];
22         for k:=1 to c[i] do
23           if j>=k*a[i] then
24             f1[i,j]:=max(f1[i,j],f1[i-1,j-k*a[i]]+k*b[i])
25                        else break;
26       end;
27   for i:=n downto 1 do
28     for j:=1000 downto 0 do
29       begin
30         f2[i,j]:=f2[i+1,j];
31         for k:=1 to c[i] do
32           if j>=k*a[i] then
33             f2[i,j]:=max(f2[i,j],f2[i+1,j-k*a[i]]+k*b[i])
34                        else break;
35       end;
36 end;
37
38 procedure main;
39 var
40   i,j,x,y:longint;
41 begin
42   readln(m);
43   for i:=1 to m do
44     begin
45       readln(x,y);
46       ans:=0;
47       for j:=0 to y do
48         ans:=max(ans,f1[x,y-j]+f2[x+2,j]);
49       writeln(ans);
50     end;
51 end;
52
53 begin
54   init;
55   main;
56 end.

原文地址:https://www.cnblogs.com/zyx-crying/p/9493707.html

时间: 2024-08-03 09:06:53

JZOJ_3223. 【HBOI2013】Ede的新背包问题 (Standard IO)的相关文章

谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

原文:谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 篡写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源调控器: 第二部分:SQL Server中资源调控器: 第三部分:SQL Server资源调控器运用场景—CPU: 第四部分:SQL Server资源调控器运用场景—IO: 第五部分:总结: 第六部分:作者简介:

BZOJ3163&amp;Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]

3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][Status][Discuss] Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valent

【BZOJ】【3163】【HEOI2013】Eden的新背包问题

多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~n号物品花了j块钱的最大价值(这里我将所有的物品编号都加了1,原因……因为我一开始没+1,WA了QAQ) 然后询问的时候$ans=max_{j=0}^{e}\{ans,g1[d-1][j]+g2[d+1][e-j]\}$ 因为编号是0~n-1,所以这里$d-1$这一项是会越界的!不知为什么在CH上过

题解:序列 (Standard IO)

题解 序列 (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits Description Fiugou想要在一个长度为N的序列A中找到不同位置的三个数,以这三个数为三边长来构成一个三角形.但是它希望在满足条件下,这三个数的位置尽量靠前.具体地,设这三个数的为Ai,Aj,Ak(i<j<k), Fiugou希望k尽量小:当k相等时,满足j尽量小:当k,j均相等时,满足i尽量小.但是这个序列中的数可

bzoj3163: [Heoi2013]Eden的新背包问题

Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine’s day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择买哪些玩偶

DSY3163*Eden的新背包问题

Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine's day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择

[HEOI2013]Eden 的新背包问题

题目描述 " 寄 没 有 地 址 的 信 ,这 样 的 情 绪 有 种 距 离 ,你 放 着 谁 的 歌 曲 ,是 怎 样 的 心 情 . 能 不 能 说 给 我 听 ." 失忆的 Eden 总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给 Eden 出谜题:在 valentine's day 的夜晚,两人在闹市 中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden 这样的 一个问题:有 n 个玩偶,每个玩偶

BZOJ 3163 Eden的新背包问题

分治背包+单调队列优化. 但是为什么maxn要1w多?...不怎么懂. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<cstdlib> #define maxn 10050 #define maxs 1050 #define maxm 300500 using namespace s

NOI-CCF 1123. A-B (Standard IO)

题目描述 给定N个数Ai,以及一个正整数C,问有多少对i,j,满足Ai-Aj=C. 输入 第一行输入两个空格隔开的整数N和C第2至N+1行每行包含一个整数 A_i 输出 输出一个数表示答案. 样例输入 5 3 2 1 4 2 5 样例输出 3 数据范围限制 N <= 200000,所有数字保证在32位有符号整型内. 1 /* 2 由于a[i]-a[j]=c; 3 我们希望找的就是序列中A[i]+C的个数. 4 我们可以先求出A中小于等于A[i]+C的数的个数. 5 再求出A中小于等于A[i]+C