Mr. Panda and Crystal HDU - 6007 最短路+完全背包
题目:题目链接
思路:不难看出,合成每个宝石需要消耗一定的魔力值,每个宝石有一定的收益,所以只要我们知道每个宝石合成的最小花费,该题就可以转化为一个背包容量为初始魔力值的完全背包问题,每个宝石的最小花费可以用dijkstra跑一遍最短路算出,路径长度用合成花费表示。
AC代码:
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- #include <queue>
- using namespace std;
- const int maxn = + ;
- int vol, n, m, INF;
- struct node {
- int c, w;
- vector<int> v;
- vector<vector<pair<int, int> > > vec;
- friend bool operator < (node a, node b) {
- return a.w > b.w;
- }
- }gem[maxn];
- priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> > q;
- bool vis[maxn];
- void init() {
- for(int i = ; i <= n; ++i) {
- for(int j = ; j < gem[i].vec.size(); ++j)
- gem[i].vec[j].clear();
- gem[i].vec.clear();
- gem[i].v.clear();
- }
- while(!q.empty())
- q.pop();
- memset(vis, false, sizeof(vis));
- }
- bool get_sum(int id) {
- int sum, _min = INF;
- for(int i = ; i < gem[id].vec.size(); ++i) {
- sum = ;
- for(int j = ; j < gem[id].vec[i].size(); ++j) {
- sum += gem[gem[id].vec[i][j].first].c * gem[id].vec[i][j].second;
- if(sum > INF)
- sum = INF;
- }
- _min = min(_min, sum);
- }
- if(_min < gem[id].c) {
- gem[id].c = _min;
- return true;
- }
- return false;
- }
- void dijkstra() {
- while(!q.empty()) {
- pair<int, int> P = q.top();
- q.pop();
- if(vis[P.second])
- continue;
- vis[P.second] = true;
- for(int i = ; i < gem[P.second].v.size(); ++i) {
- if(!vis[gem[P.second].v[i]] && get_sum(gem[P.second].v[i])) {
- q.push(make_pair(gem[gem[P.second].v[i]].c, gem[P.second].v[i]));
- }
- }
- }
- }
- int dp[maxn];
- int main()
- {
- ios::sync_with_stdio();
- cin.tie();
- int T, t = ;
- cin >> T;
- while(T--) {
- cin >> vol >> n >> m;
- INF = vol + ;
- init();
- int flag;
- for(int i = ; i <= n; ++i) {
- cin >> flag;
- if(flag)
- cin >> gem[i].c >> gem[i].w;
- else {
- cin >> gem[i].w;
- gem[i].c = INF;
- }
- }
- int id, num, c, nu;
- vector<pair<int, int> > ope;
- for(int i = ; i < m; ++i) {
- cin >> id >> num;
- ope.clear();
- for(int j = ; j < num; ++j) {
- cin >> c >> nu;
- ope.push_back(make_pair(c, nu));
- gem[c].v.push_back(id);
- }
- gem[id].vec.push_back(ope);
- }
- for(int i = ; i <= n; ++i)
- if(gem[i].c < INF)
- q.push(make_pair(gem[i].c, i));
- dijkstra();
- memset(dp, , sizeof(dp));
- for(int i = ; i <= n; ++i)
- for(int v = ; v <= vol; ++v)
- if(v >= gem[i].c)
- dp[v] = max(dp[v], dp[v - gem[i].c] + gem[i].w);
- cout << "Case #" << ++t << ": " << dp[vol] << endl;
- }
- return ;
- }
Mr. Panda and Crystal HDU - 6007 最短路+完全背包的更多相关文章
- hdu6007 Mr. Panda and Crystal 最短路+完全背包
/** 题目:hdu6007 Mr. Panda and Crystal 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6007 题意:魔法师有m能量,有n ...
- HDU 6007 Mr. Panda and Crystal (背包+spfa)
题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多 ...
- Mr. Panda and Crystal(最短路+完全背包)
http://codeforces.com/gym/101206/attachments 题意: T组输入,每组给出m,n,k,m为能量总数,n为水晶种类数,k为合成方案数.有的水晶可以用能量制造,有 ...
- HDU 3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 3339 In Action【最短路+01背包】
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3339] In Action Time Limit: 2000/1000 MS (Java/Other ...
- 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定理
2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定 ...
随机推荐
- SpringBoot---核心---基本配置
1.[入口类和@SpringBootApplication注解] 2.[关闭特定的配置] 3.[定制Banner] 1.1 修改Banner 1.2 关闭Banner 4.SpringBoot配置文件
- 056 Merge Intervals 合并区间
给出一个区间的集合, 请合并所有重叠的区间.示例:给出 [1,3],[2,6],[8,10],[15,18],返回 [1,6],[8,10],[15,18].详见:https://leetcode.c ...
- Hadoop数据管理
本节主要从三方面介绍Hadoop数据管理:分布式文件系统HDFS.分部式数据库HBase和数据仓库工具Hive. 1. HDFS的数据管理 HDFS是分布式计算的存储基石,Hadoop分布式文件系统和 ...
- Shell分割字符得到数组
#!/bin/bash p=$(hadoop fs -ls /tgl/data |awk '{print $8}') #要将$a分割开,先存储旧的分隔符 OLD_IFS="$IFS" ...
- BeanCopier使用说明
BeanCopier从名字可以看出了,是一个快捷的bean类复制工具类. 一 如何使用,我就直接丢代码了 public class BeanCopierTest { static SimpleDate ...
- JFileChooser 打开文件选择(一)
import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; public clas ...
- java的三大特性之一多态概述
多态---概念 所谓多态就是一个引用在不同情况下的多种状态.多态是指通过指向父亲的指针,来调用在不同的子类中实现的方法. 多态---注意事项 00.java允许父类的引用变量引用它的子类的实例(对象) ...
- 关于Linux系统启动时出现UVD not responding, Trying to reset the vcpu问题的解决
本人的老古董笔记本!不知道什么时候显卡烧坏了 每次启动Linux的时候就会出现错误,信息如下: UVD not responding, trying to reset the VCPU! 讲道理,显卡 ...
- JavaWeb_03_JavaScript学习小结1
1.javascript的简介 是基于对象和事件驱动的语言,应用于客户端. 基于对象: 提供好了很多对象,可以直接拿过来使用 事件驱动: html做网站静态效果,javascript动态效果 客户端: ...
- 织梦list/arclist标签调用文章内容
list标签: 1. 进入后台->模型表单-> 频道模型 -> 内容模型管理 -> 修改对应的模型 2. 列表附加字段-填写body 3. 调用时添加“addfields='b ...