题目:题目链接

思路:不难看出,合成每个宝石需要消耗一定的魔力值,每个宝石有一定的收益,所以只要我们知道每个宝石合成的最小花费,该题就可以转化为一个背包容量为初始魔力值的完全背包问题,每个宝石的最小花费可以用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 最短路+完全背包的更多相关文章

  1. hdu6007 Mr. Panda and Crystal 最短路+完全背包

    /** 题目:hdu6007 Mr. Panda and Crystal 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6007 题意:魔法师有m能量,有n ...

  2. HDU 6007 Mr. Panda and Crystal (背包+spfa)

    题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多 ...

  3. Mr. Panda and Crystal(最短路+完全背包)

    http://codeforces.com/gym/101206/attachments 题意: T组输入,每组给出m,n,k,m为能量总数,n为水晶种类数,k为合成方案数.有的水晶可以用能量制造,有 ...

  4. HDU 3339 最短路+01背包

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  6. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  8. HDU 3339 In Action【最短路+01背包】

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3339] In Action Time Limit: 2000/1000 MS (Java/Other ...

  9. 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-中国剩余定理+同余定 ...

随机推荐

  1. Tensorflow版Faster RCNN源码解析(TFFRCNN) (2)推断(测试)过程不使用RPN时代码运行流程

    本blog为github上CharlesShang/TFFRCNN版源码解析系列代码笔记第二篇   推断(测试)过程不使用RPN时代码运行流程 作者:Jiang Wu  原文见:https://hom ...

  2. Java_面向对象的 static 和 abstract

    static:表示静态的 static:可以用来修饰属性.方法.代码块(或初始化块).内部类. 一.static修饰属性(类变量): public class TestStatic { //stati ...

  3. Redis集群批量操作

    Redis在3.0版正式引入了集群这个特性,扩展变得非常简单.然而当你开心的升级到3.0后,却发现有些很好用的功能现在工作不了了, 比如我们今天要聊的pipeline功能等批量操作. Redis集群是 ...

  4. BZOJ4939: [Ynoi2016]掉进兔子洞(莫队 bitset)

    题意 题目链接 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于 ...

  5. android dialog style属性设置

    <!--最近做项目,用到alertDialog,用系统自带的style很难看,所以查了资料自己定义了个style. res/value/style.xml内增加以下代码:--> <s ...

  6. iOS VIPER架构(二)

    第一篇文章对VIPER进行了简单的介绍,这篇文章将从VIPER的源头开始,比较现有的几种VIPER实现,对VIPER进行进一步的职责剖析,并对各种细节实现问题进行挖掘和探讨.最后给出两个完整的VIPE ...

  7. Android中,Broadcas介绍

    什么是广播 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.我们拿广播电台来做个比方.我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们 ...

  8. PHP判断两个矩形是否相交

    <?php $s = is_rect_intersect(1,2,1,2,4,5,0,3); var_dump($s); /* 如果两个矩形相交,那么矩形A B的中心点和矩形的边长是有一定关系的 ...

  9. Ecshop:ecshop nginx下实现url静态化

    1.在nginx/conf/tuwen.com.conf中添加: include ecshop.conf; 2.编辑nginx/ecshop.conf: location / { rewrite &q ...

  10. github的pull Request使用

    场景: teamA要一起做一个项目,选择用github管理自己的代码仓库,这时userA在github上新建了一个远程仓库,其他人需要通过pull request来实现提交.那么,问题来了,pull ...