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) ...
随机推荐
- CentOS 安装开发工具包
这里使用组安装包,一次性安装所有开发者工具. 1.查看有那些组安装包可用. [root@bogon ~]# yum grouplist | more 2.搜索一下有哪些和 Development 有关 ...
- 解读vue filter
1.全局filter, 全局的过滤一般在main.js里面使用 <div id="app"> <div> {{testVal | filVal(10,30) ...
- 4、、多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征 目前为止,我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,...xn) 增添更多特征后, ...
- 缓存模块redis
1.安装 安装 下载 :wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压:tar xzf redis-3.2.8.tar.gz ...
- [JavaScript深入系列]JavaScript深入之执行上下文栈(转载)
顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () { co ...
- R语言控制流
一般来说R语言是自上而下执行的,但是遇到特殊情况可能用到循环执行某些语句,这时候条件运算和循环就能派上用场了.
- Redis和Ehcached的区别
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...
- windows平台搭建Mongo数据库复制集(类似集群)(二)
通过rs.status()命令我们可以查询到各个节点运行正常. 一.数据同步测试 在28011.28012端口上进行插入: 因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replic ...
- JavaSE---JDK提供的命令行工具---javap
1.javap 1.1 javap是JDK自带的反解析工具: 1.2 作用:就是根据class字节码文件,反解析出 当前类 对应的code区(汇编指令).本地变量表.异常表和代码行偏移量映射 ...
- 解决swagger跨项目或跨程序集注释不显示问题
背景 我们在使用Swagger生成.NET Core Web Api 项目接口文档时候,发现接口的入参和出参的注释是看不见的,如下: 但是我想要结果是这样: 原因分析以及方案 为什么没有显示注释呢,注 ...