Mr. Panda and Crystal(最短路+完全背包)
http://codeforces.com/gym/101206/attachments
题意:
T组输入,每组给出m,n,k,m为能量总数,n为水晶种类数,k为合成方案数。有的水晶可以用能量制造,有的水晶不行,有的水晶可以通过其他水晶合成。每种水晶都有固定的价格。给出部分水晶的造价,所有水晶的价格和k个合成方案,问卖水晶最大能获得的钱数
思路:
可以将合成操作理解为最短路中的松弛操作,套bellman_ford的方法,每次遍历所有合成方案一次,若没有一个水晶造价被松弛,则跳出循环,所有造价均已达到最小
之后套用完全背包即可(每种水晶可以使用无限次,能量有限)
#include <bits//stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=205;
ll w[maxn],p[maxn];
ll obj[maxn],num[maxn],use[maxn][maxn],cost[maxn][maxn];
ll dp[maxn];
int T,m,n,k;
void bellman_ford(){
while(1){
int flag=0;
for(int i=1;i<=k;i++){
ll cos=0;
for(int j=1;j<=num[i];j++){
if(w[use[i][j]]==-1){
cos=-1;break;
}
cos+=w[use[i][j]]*cost[i][j];
}
if(cos!=-1){
if(cos<w[obj[i]]||w[obj[i]]==-1){
w[obj[i]]=cos;
flag=1;
}
}
}
if(!flag)break;
}
}
void init(){
for(int i=1;i<=n;i++){
w[i]=-1;
}
for(int i=0;i<=m;i++)
dp[i]=0;
}
int main(){
cin>>T;
for(int kase=1;kase<=T;kase++){
scanf("%d%d%d",&m,&n,&k);
init();
for(int i=1;i<=n;i++){
int type;
scanf("%d",&type);
if(type)
scanf("%lld%lld",&w[i],&p[i]);
else
scanf("%lld",&p[i]);
}
for(int i=1;i<=k;i++){
scanf("%lld%lld",&obj[i],&num[i]);
for(int j=1;j<=num[i];j++){
scanf("%lld%lld",&use[i][j],&cost[i][j]);
}
}
bellman_ford();
for(int i=1;i<=n;i++){
if(w[i]==-1)continue;
for(int j=w[i];j<=m;j++){
dp[j]=max(dp[j],dp[j-w[i]]+p[i]);
}
}
printf("Case #%d: %lld\n",kase,dp[m]);
}
}
/*
2
100 3 2
0 20
1 15 10
1 2 1
1 2 2 1 3 1
2 1 3 2
100 3 2
1 3 1
1 4 1
0 10
3 1 1 3
3 1 2 2
*/
Mr. Panda and Crystal(最短路+完全背包)的更多相关文章
- hdu6007 Mr. Panda and Crystal 最短路+完全背包
/** 题目:hdu6007 Mr. Panda and Crystal 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6007 题意:魔法师有m能量,有n ...
- Mr. Panda and Crystal HDU - 6007 最短路+完全背包
题目:题目链接 思路:不难看出,合成每个宝石需要消耗一定的魔力值,每个宝石有一定的收益,所以只要我们知道每个宝石合成的最小花费,该题就可以转化为一个背包容量为初始魔力值的完全背包问题,每个宝石的最小花 ...
- HDU 6007 Mr. Panda and Crystal (背包+spfa)
题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多 ...
- HDU 3339 In Action【最短路+01背包】
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3339] In Action Time Limit: 2000/1000 MS (Java/Other ...
- HDU 3339 In Action【最短路+01背包模板/主要是建模看谁是容量、价值】
Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the n ...
- 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-中国剩余定理+同余定 ...
- H - Mr. Panda and Birthday Song Gym - 101775H (动态规划)
Mrs. Panda’s birthday is coming. Mr. Panda wants to compose a song as gift for her birthday. It is k ...
- *HDU3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 3339 In Action 最短路+01背包
题目链接: 题目 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- Junit测试错误:### Error building SqlSession
错误代码: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error ...
- kmp(多次可重叠匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=1686 Oulipo Problem Description The French author Georges ...
- k8s入门教程
1. k8s概述 Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用. 教程主要介绍怎么使用阿里云容器服务(kubernetes版本 ...
- [转]java web 文件上传
实现WEB开发中的文件上传功能,需完成如下二步操作: 在WEB页面中添加上传输入项,<input type=“life” name=“”>,使用时注意: 1. 必须要设置 ...
- C# json格式的序列化与反序列化
使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象 Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易 ...
- NGUI的输入框制作(attach- input filed script的使用)
一,我们添加一个sprite,给这个sprite添加一个box collider ,然后添加input filed script,如下图: 二,我们给sprite添加一个child的label,然后绑 ...
- SQL 查询中not in 与 not exists 的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- day64--pymysql模块的使用、视图、触发器、函数、存储过程、事务
一.pymysql的下载和使用 (一)pymysql模块的下载:pip3 install pymysql # 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中) im ...
- 【学习总结】GirlsInAI ML-diary day-21-初识 Numpy, Matplotlib, Seanborn [柱状图、折线图、箱图]
[学习总结]GirlsInAI ML-diary 总 原博github链接-day21 初识 Numpy, Matplotlib, Seanborn [柱状图.折线图.箱图] 一.Titanic练习赛 ...
- docker初学
Docker基础知识 1. Docker基础知识点 1.1 什么是Docker Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.(集装箱原理) 1.2 什 ...