[置顶] 九度笔记之 1494:Dota
题目1494:Dota
1 秒
内存限制:128 兆
特殊判题:否
提交:559
解决:122
- 题目描述:
-
大家都知道在dota游戏中,装备是对于英雄来说十分重要的要素。
英雄们不仅可以购买单个的装备,甚至某些特定的装备组合能够合成更强的装备。
为了简化问题,我们将每个装备对于英雄的功能抽象为一个整数:价值。同时,如上所说,一些特定的装备可以用来合成更强的装备,玩家会因此获得除原装备价值外额外的价值。
给定玩家现有的金钱数,每个装备的价格和其对应的价值,以及装备合成的信息。输出,其能获得的最大价值数。
注意:每件装备只能参与合成一件合成装备(即原装备参与合成后得到合成后的新装备,原装备消失),除非一次购买多个该种装备。
- 输入:
-
输入包含多组测试数据,每组测试数据第一行为三个整数n,m,g(1<=n<=100),(0<=m<=100),(1<=g<=1000)。
分别表示存在的装备总数n,存在的装备合成关系数m,和英雄所有的金钱g。
接下去n行,每行两个整数(p,v)(1<=p<=100,1<=v<=100)分别表示该件装备的价格p,和其自身的价值v。
每组测试数据的最后为m行数据,每行由两部分组成。开头一个整数t(1<=t<=n),表示该组合成关系中需要t件装备,下去紧跟t件装备编号(按照装备在输入中的顺序从1到n编号),表示参与合成该装备的装备编号,最后一个数s(1<=s<=1000),代表这t件物品合成道具后获得的额外价值。
- 输出:
-
对于每组测试数据,输出一个整数,代表英雄可以获得的最大价值。
- 样例输入:
-
3 1 100
100 20
50 9
50 9
2 2 3 1
3 1 100
100 20
50 9
50 9
2 2 3 3
- 样例输出:
-
20
21
算法分析
这道题主要的属于背包问题,用动态规划解决,需要注意的是两点。
1. 我们把合成的装备看作单独的一件装备,计算合成装备的价格(合成所需装备价格之和),合成装备的价值(合成所需装备价值之和 加上 额外价值)。
for(int i = num_weapons;i<num_weapons+num_merge;i++){
int t=0;
std::cin>>t;
price[i]=0;
value[i]=0;
for(int j = 0;j<t;j++){
int id_weapon;
std::cin>>id_weapon;
price[i]+=price[id_weapon-1];
value[i]+=value[id_weapon-1];
}
int s = 0;
std::cin>>s;
value[i]+=s;
}
2.这道题和其它背包问题不同的在于 装备的数量并不是固定的,玩家可以重复购买多个同一种装备,包括合成装备,只要钱够就行。所以在动态规划更新dp的时候,就是从低到高更新。
for(int j = price[i];j<gold+1;j++){
maxvalue[j] = std::max(maxvalue[j],maxvalue[j-price[i]]+value[i]);
}
普通背包问题
题目1364:v字仇杀队
题目1462:两船载物问题
题目1455:珍惜现在,感恩生活
题目1209:最小邮票数
题目1420:Jobdu MM分水果
项目安排类题目
题目1499:项目安排
题目1463:招聘会
题目1434:今年暑假不AC
资源无限求最大值的题目。
题目1494:Dota
源程序
//============================================================================
// Name : judo1494.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
//02988825547
#include <iostream>
#include <cmath>
using namespace std;
void dota(int num_weapons,int num_merge,int gold){
int *price = new int[num_weapons+num_merge];
int *value = new int[num_weapons+num_merge];
int *maxvalue = new int[gold+1];
for(int i = 0;i<num_weapons;i++){
std::cin>>price[i]>>value[i];
}
for(int i = num_weapons;i<num_weapons+num_merge;i++){
int t=0;
std::cin>>t;
price[i]=0;
value[i]=0;
for(int j = 0;j<t;j++){
int id_weapon;
std::cin>>id_weapon;
price[i]+=price[id_weapon-1];
value[i]+=value[id_weapon-1];
}
int s = 0;
std::cin>>s;
value[i]+=s;
} for(int i = 0;i<gold+1;i++){
maxvalue[i]=0;
}
for(int i = 0;i<num_weapons+num_merge;i++){
for(int j = price[i];j<gold+1;j++){
maxvalue[j] = std::max(maxvalue[j],maxvalue[j-price[i]]+value[i]);
}
}
std::cout<< maxvalue[gold]<<std::endl;
delete []price;
delete []value;
delete []maxvalue; }
int main() {
//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
int n;
int m;
int g;
while(std::cin>>n>>m>>g){
dota(n,m,g);
}
return 0;
} /**************************************************************
Problem: 1494
User: KES
Language: C++
Result: Accepted
Time:30 ms
Memory:1520 kb
****************************************************************/
[置顶] 九度笔记之 1494:Dota的更多相关文章
- [置顶] 九度笔记之 1434:今年暑假不AC
题目1434:今年暑假不AC 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:307 解决:180 题目描述: “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@# ...
- [置顶] Android开发笔记(成长轨迹)
分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...
- 九度oj 题目1494:Dota
题目描述: 大家都知道在dota游戏中,装备是对于英雄来说十分重要的要素. 英雄们不仅可以购买单个的装备,甚至某些特定的装备组合能够合成更强的装备. 为了简化问题,我们将每个装备对于英雄的功能抽象为一 ...
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- [置顶] html学习笔记,锚点,超链接,table布局,表头,h,sub,blockquote,ul,li,ol.dl,加入收藏,打印,弹出窗口
<a name="shouye"></a> <strong>strong加粗</strong> <br> 没有加粗 &l ...
- [置顶] sqlplus 使用笔记
关于sqlplus常用命令的一些记录 这两天去参加了一个关于orcale 12C release1的技术交流会,主要关注的是orcale Spatial 在12C上面的一些新的变化,一起交流的有学校的 ...
- 九度OJ 1337:寻找最长合法括号序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:839 解决:179 题目描述: 给你一个长度为N的,由'('和')'组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的 ...
- Javascript笔记----实现Page页面右下角置顶按钮.
从用博客开始,发现博客园中很多博友的博客中在Page右下角都有个图标,不论屏幕怎么拉伸,都始终停留在右下角.点击后页面置顶.后面想想写一个Demo来实现这种效果吧. 一. 图标右下角固定. 1.SS ...
- JavaScript学习笔记-元素在滚动条滑动一定高度后自动置顶
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- Requests中出现大量ASYNC_NETWORK_IO等待
七夕活动,网页显示异常:504 Gateway Time-out The server didn't respond in time.开发询问数据库是否正常,当时正连接在实例上查询数据,感觉响应确实慢 ...
- lucene入门创建索引——(二)
1.程序宏观结构图
- 高可用的并行MySQL数据同步及分布式
首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下: 1.树状结构(Master,Backup-Master ...
- 【转】使用import scope解决maven继承(单)问题
http://blog.csdn.net/mn960mn/article/details/50894022 测试环境 maven 3.3.9 想必大家在做SpringBoot应用的时候,都会有如下代码 ...
- Python 单例模式讲解
Python 单例模式讲解 本节内容: classmethod用途 单例模式方法一 类__new__方法讲解 单例模式方法二 前言: 使用单例方法的好处:对于一个类,多次实例化会产生多个对象,若使用单 ...
- highchart 横轴纵轴数据
1.highchart 横轴为字符串数组,必须加引号:纵轴为数值数组,不能加引号2.series中的json内容,属性不能加引号3.chart.height: Number,图表的高度.默认高度是根据 ...
- Laravel 的计划任务
避免并发执行 $schedule->command('emails:send')->withoutOverlapping(); 这里需要注意,对于 call function 定义的计划任 ...
- 4.类型设计规范《.NET设计规范》
类是引用类型的一般情况,占了框架中的大多情况,类的流行归于它支持面向对象的特征,以及它的普遍的适用性,基类和抽象类是两个特殊的逻辑分组,它们与扩张性有关. 由于CLR不支持多继承,接口类型可以用来模拟 ...
- wfst的compose算法
介绍一些compose算法,以及这部分的代码实现. 原理部分参考: 走进语音识别中的 WFST(二) 可以看下示例图: 我们先来看一下 Composition 的效果,图(a)和图(b)Composi ...
- 棋盘游戏 HDU1281
一开始毫无思路 看了题解才发现是二分图的最大匹配问题 行为n 列为m 行列匹配 (一行只能与一列匹配 这点和象棋的车的意义一样) 再去掉点看看最大匹配会不会少 如果少了说明为关键点 其中 ...