链接:https://www.nowcoder.com/acm/contest/74/B
来源:牛客网

题目描述

Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了,
和绝地求生一样,游戏人物本身可以携带一定重量m的物品,装备背包
之后可以多携带h(h为0代表没有装备背包)重量的东西。玩了几天
taotao发现了一个BUG,当装备背包之后,如果可携带重量没有满,就
可以拿一个任意重的东西。(解释看样例)有一天taotao空降到了一个
奇怪的岛上,岛上有n件装备,每个装备都有重量Wi和威力值Vi,但taotao
不认识这些装备,所以他来求助你,挑选威力最大的装备,帮助他吃鸡。

输入描述:

本题有多组输入(小于10),当n=0时结束输入。
第一行输入n,m,h。n,m,h为整数,并且0<=n,m,h<=100,
接下来n行,每行输入第i个物品的物品的重量Wi和威力值Vi。0<=Wi,Vi<=100.

输出描述:

输出最大威力值,每组输出一行。

输入例子:
3 3 3
2 3
3 2
2 3
0
输出例子:
8

-->

示例1

输入

3 3 3
2 3
3 2
2 3
0

输出

8

说明

可携带的总重量为6,当拿了前两件装备,此时容量为5/6,还可以再拿第三件物品。

题解

背包$dp$。

这题有个坑点,只有当$h$不为$0$的时候,才有$bug$。

即:$h$为$0$时,直接做$01$背包;$h$不为$0$时,可以枚举哪一个最后放进去,然后去除这个做$01$背包再算答案。

#include <bits/stdc++.h>
using namespace std; const int maxn = 200 + 10;
int n, m, h;
int dp[maxn];
int w[maxn], v[maxn]; int main() {
while(~scanf("%d", &n)) {
if(n == 0) break;
scanf("%d%d", &m, &h);
memset(dp, -1, sizeof dp);
dp[0] = 0;
for(int i = 1; i <= n; i ++) {
scanf("%d%d", &w[i], &v[i]);
if(w[i] == 0) dp[0] += v[i];
}
int ans = 0;
if(h == 0) {
for(int i = 1; i <= n; i ++) {
if(w[i] == 0) continue;
if(v[i] == 0) continue;
for(int j = m; j >= w[i]; j --) {
if(dp[j - w[i]] == -1) continue;
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
for(int i = 0; i <= m; i ++) {
ans = max(ans, dp[i]);
}
} else {
ans = dp[0];
for(int t = 1; t <= n; t ++) {
if(w[t] == 0 || v[t] == 0) continue;
for(int i = 1; i <= m + h; i ++) {
dp[i] = -1;
}
for(int i = 1; i <= n; i ++) {
if(w[i] == 0 || v[i] == 0) continue;
if(i == t) continue;
for(int j = m + h; j >= w[i]; j --) {
if(dp[j - w[i]] == -1) continue;
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
for(int i = 0; i <= m + h; i ++) {
ans = max(ans, dp[i]);
}
for(int i = 0; i <= m + h - 1; i ++) {
if(dp[i] == -1) continue;
ans = max(ans, dp[i] + v[t]);
}
}
}
printf("%d\n", ans);
}
return 0;
}

2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡的更多相关文章

  1. 2018年全国多校算法寒假训练营练习比赛(第四场)B:道路建设

    传送门:https://www.nowcoder.net/acm/contest/76/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言131072K 64b ...

  2. 2018年全国多校算法寒假训练营练习比赛(第四场)F:Call to your teacher

    传送门:https://www.nowcoder.net/acm/contest/76/F 题目描述 从实验室出来后,你忽然发现你居然把自己的电脑落在了实验室里,但是实验室的老师已经把大门锁上了.更糟 ...

  3. 牛客网-2018年全国多校算法寒假训练营练习比赛(第四场)-A

    解题思路:二分图的最大匹配,但这题是所有点都遍历一遍,所以答案/2: 代码: #include<iostream> #include<algorithm> #include&l ...

  4. 2018年全国多校算法寒假训练营练习比赛(第一场)闯关的lulu

    闯关的lulu 链接:https://www.nowcoder.com/acm/contest/67/J 来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每 ...

  5. 2018年全国多校算法寒假训练营练习比赛(第一场)D N阶汉诺塔变形

    https://www.nowcoder.com/acm/contest/67/D 思路: 先手动模拟一下过程,以下是模拟过程,按顺序表示第几步需要移动的盘标号 1 1 2 1 1 2 1 1 3 1 ...

  6. 2018年全国多校算法寒假训练营练习比赛(第一场)E 恋与程序员

    https://www.nowcoder.com/acm/contest/67/E 思路: dfs 代码: #include<bits/stdc++.h> using namespace ...

  7. 2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈

    https://www.nowcoder.com/acm/contest/67/G 思路: 分形. 记录中间左边点的坐标,然后推出另外3个点的坐标,递归到最简单的情况. 代码: #include< ...

  8. 2018年全国多校算法寒假训练营练习比赛(第一场)C 六子冲

    https://www.nowcoder.com/acm/contest/67/C 思路: 模拟. 代码: #include<bits/stdc++.h> using namespace ...

  9. 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁

    链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀 ...

随机推荐

  1. Cloudera Manager Admin控制台启动不起来

    这几天都在搞大数据这一块,由于以前自己在弄hadoop等安装的时候特别的费劲,于是乎找到了广大程序员的福音——cloudera manager,但是第一步安装好了以后无法启动,再三思考+百度发现: 通 ...

  2. 引发类型为“System.OutOfMemoryException”的异常

    在运维工作中,经常能接到客户的反馈这个:引发类型为“System.OutOfMemoryException”的异常.客户反馈物理内存都还有富余,怎么报内存不足的错误呢! 什么时候会引发System.O ...

  3. CSS line-height应用

    一.固定高度的容器,单行文本垂直居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  4. 动态SQL中变量赋值

    在动态SQL语句中进行变量的值绑定比较麻烦,这儿做个记录 declare @COUNT int,@sql nvarchar(max) set @sql = 'select @COUNT = count ...

  5. IE安全系列之——RES Protocol

    IE安全系列之--RES Protocol res Protocol用于从一个文件里面提取指定资源.语法为:res://sFile[/sType]/sID 各Token含义: sfile:百分号编码. ...

  6. solr4.10.3部署到tomcat——(十)

    0. 准备环境:

  7. 数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID)

    数据库名(DB_NAME).实例名(Instance_name).以及操作系统环境变量(ORACLE_SID) 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instanc ...

  8. java连接redis无法连接,报异常RedisConnectionException

    不管是spring还是原生jedis连接redis,如果连不上多半是linux服务器的问题: 1 首先确保redis端口开放: 把6379或者redis的端口开放即可 2 redis.conf配置注释 ...

  9. 【洛谷题解】P2303 [SDOi2012]Longge的问题

    题目传送门:链接. 能自己推出正确的式子的感觉真的很好! 题意简述: 求\(\sum_{i=1}^{n}gcd(i,n)\).\(n\leq 2^{32}\). 题解: 我们开始化简式子: \(\su ...

  10. CentOS时区GMT修改为CST

    GMT:格林尼标准时间 北京时间=GMT时间+8小时 [root@sa~]# date -R 查看目前服务器的时间标准 [root@sa~]# vi /etc/sysconfig/clock 将ZON ...