JZOJ 3223. 【HBOI2013】Ede的新背包问题

traveller-ly 2018-08-20 原文

JZOJ 3223. 【HBOI2013】Ede的新背包问题

Description

 

Input

Output

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

Sample Input

5
2 3 4
1 2 1
4 1 2
2 1 1
3 2 3
5
1 10
2 7
3 4
4 8
0 5
 

Sample Output

13
11
6
12
4
 

Data Constraint

 
做法:思考一下假如题目没有去掉某个玩偶,而只是给定q个询问,然后改变m的值,我们会怎么做?
我们会找到最大的m,然后跑一遍多重背包就好了。
     然后思考一下当时的转移方程? f[i] = max(f[i], f[i – vi] + wi); 对吗? 我们在学习背包的时候得知,
空间上是可以只用一维的,那么如果我们不去掉那一维呢?f[i][j] = max(f[i][j], f[i – 1][j – vi] + wi),f[i][j]表示
做完了前i个物品,可以获得的最大价值。显然此时的i其实是没有影响的,所以我们省去,但如果不省去,我们
不就获得了过程中最优吗?看到这是不是想到怎么做了,我们跑两遍,正着来一遍,反着来一遍,然后直接统计
答案就好啦。
代码如下:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #define N 2007
 5 #define LL long long
 6 using namespace std;
 7 int n, q, w[N], v[N], c[N];
 8 LL f[N][N], g[N][N];
 9 
10 int max(int a, int b)
11 {
12     if (a > b)    return a;
13     return b;
14 }
15 
16 void Init()
17 {
18     scanf("%d", &n);
19     for (int i = 1; i <= n; i++)
20         scanf("%d%d%d", &v[i], &w[i], &c[i]);
21 }
22 
23 void Dp()
24 {
25     for (int i = 1; i <= n; i++)
26         for (int j = 1000; j >= 0; j--)
27         {
28             f[i][j] = f[i - 1][j];
29                 for (int k = 1; k <= c[i]; k++)
30                     if (j >= k * v[i])    f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
31                     else break;
32         }
33     memset(g, 0, sizeof(g));
34     for (int i = n; i >= 1; i--)
35         for (int j = 1000; j >= 0; j--)
36         {
37             g[i][j] = g[i + 1][j];
38                 for (int k = 1; k <= c[i]; k++)
39                     if (j >= k * v[i])    g[i][j] = max(g[i][j], g[i + 1][j - k * v[i]] + k * w[i]);
40                     else break;
41         }
42 }
43 
44 int main()
45 {
46     Init();
47     Dp();
48     scanf("%d", &q);
49     for (; q--; )
50     {
51         int m, ban;
52         scanf("%d%d", &ban, &m);
53         int ans = 0;
54         for (int i = 0; i <= m; i++)
55                 ans = max(ans, f[ban][m - i] + g[ban + 2][i]);
56         printf("%d\n", ans);
57     }
58 } 

View Code

 

发表于 2018-08-20 15:43 执迷于沿途风景的旅人 阅读() 评论() 编辑 收藏

 

版权声明:本文为traveller-ly原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/traveller-ly/p/9505902.html

JZOJ 3223. 【HBOI2013】Ede的新背包问题的更多相关文章

  1. JZOJ 2136. 【GDKOI2004】汉诺塔

    JZOJ 2136. 【GDKOI2004】汉诺塔 2136. 【GDKOI2004】汉诺塔 (Standar […]...

  2. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    JZOJ 3462. 【NOIP2013模拟联考5】休息(rest) 3462. 【NOIP2013模拟联考5 […]...

  3. JZOJ 3385. 【NOIP2013模拟】黑魔法师之门

    JZOJ 3385. 【NOIP2013模拟】黑魔法师之门 3385. 【NOIP2013模拟】黑魔法师之门  […]...

  4. JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO)

    JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO) 3382. 【NOIP201 […]...

  5. JZOJ 1266. 玉米田

    JZOJ 1266. 玉米田 1266. 玉米田(cowfood.pas/c/cpp) (File IO):  […]...

  6. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C 3509. 【NOIP2013模拟11. […]...

  7. JZOJ 1264. 乱头发节

    JZOJ 1264. 乱头发节 1264. 乱头发节(badhair.pas/c/cpp) (File IO) […]...

  8. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    JZOJ 4269. 【NOIP2015模拟10.27】挑竹签 4269. 【NOIP2015模拟10.27】 […]...

随机推荐

  1. 基于MFCC的语音数据特征提取概述

    1. 概述   语音是人类之间沟通交流的最直接也是最快捷方便的一种手段,而实现人类与计算机之间畅通无阻的语音交 […]...

  2. 结合“性能监视器” 排查、处理性能瓶颈导致应用吞吐率等指标上不去的问题

    双11备战前夕,总绕不过性能压测环节,TPS 一直上不去 / 不达标,除了代码上的问题外,服务器环境、配置、网 […]...

  3. Linux 软件安装的三种方式

    Linux 软件安装的三种方式 1.yum ​ 语法格式: ​ yum -y install package. […]...

  4. JQGrid 导出Excel 获取筛选条件

    需求描述:页面加载后,进行相关数据搜索,要求点击导出按钮后  下载Excel文件。 思路:希望在点击【导出Ex […]...

  5. a标签点击下载不让他跳转到空白页的方法

    今天项目需求,点击下载文件不要跳到空白页 一开始用a标签href文件下载地址测试其他浏览器可以就ie跳到空白页 […]...

  6. npm常用命令

    npm常用命令 简介 npm是跟随node一起安装的包(模块)管理器。常见的使用场景有以下几种: 允许用户从n […]...

  7. 移动端调试——五款前端开发利器

    个人推荐使用:vConsole 1. vConsole 推荐指数:★★★☆☆ 腾讯出品的 Web 调试面板,相 […]...

  8. 数据采集与分析的那些事——从数据埋点到AB测试

    作者:网易有数郑栋。   一、为什么企业需要一套完善的用户行为埋点和分析平台   产品初创期间,需要分析天使用 […]...

展开目录

目录导航