[P1860]新魔法药水
题目描述
商店里有N种药水,每种药水都有一个售价和回收价。小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水。他一天可以使用K次魔法,问他一天最多赚多少钱?
输入输出格式
输入格式:
第一行四个数N、M、V、K
接下来N行,每行两个数,表示药水的售价和回收价。
接下来M行,每行若干个数,第一个数表示魔法的成品,第二个数是原料的种数,接下来为各种原料的编号
输出格式:
一个数,表示小S的最大利润
好棒的一道$dp$,瞎撸一节课竟然搞出来了。。
其实本质就是一个一维背包和一个二维费用背包套在一起,细节神烦
具体每个变量什么意思写得很清楚了,这种题写上注释自己也不容易出错
$dp$数组胡乱复制wa了好多发。。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 using namespace std; 6 int n,m,V,cnt; 7 int tmp[61][31];//表示当前处理到i次用了j魔法的最低费用 8 int f[61][31];//表示第i件物品用j次魔法组成的最低费用 9 //用tmp更新f 10 int dp[1001][31];//表示当前花费i元用了j次魔法的最大收益 11 //用dp[i][j]-i更新答案 12 int v[61];//物品的售价 13 int id[250],sum[250];//每种魔法的成品和需要的原材料个数 14 vector<int>s[250];//每种魔法所需的原料是什么 15 int main() 16 { 17 memset(f,63,sizeof(f)); 18 scanf("%d%d%d%d",&n,&m,&V,&cnt); 19 for(int i=1;i<=n;i++) scanf("%d%d",&f[i][0],&v[i]); 20 for(int i=1;i<=m;i++) 21 { 22 scanf("%d%d",&id[i],&sum[i]); 23 for(int j=1;j<=sum[i];j++) 24 { 25 int x; scanf("%d",&x); 26 s[i].push_back(x); 27 } 28 } 29 for(int i=1;i<=cnt;i++) 30 for(int j=1;j<=m;j++) 31 { 32 memset(tmp,63,sizeof(tmp)); 33 tmp[0][0]=0; 34 int T=i-1; 35 for(int k=0;k<=T;k++) 36 for(int l=1;l<=sum[j];l++) 37 { 38 int x=s[j][l-1]; 39 for(int a=0;a<=k;a++) 40 tmp[l][k]=min(tmp[l][k],tmp[l-1][k-a]+f[x][a]); 41 } 42 f[id[j]][i]=min(f[id[j]][i],tmp[sum[j]][T]); 43 for(int k=i;k<=cnt;k++) f[id[j]][k]=min(f[id[j]][k],f[id[j]][i]); 44 } 45 for(int i=1;i<=V;i++) 46 for(int j=0;j<=cnt;j++) 47 { 48 for(int k=1;k<=n;k++) 49 for(int l=0;l<=j;l++) 50 if(f[k][l]<=i) 51 dp[i][j]=max(dp[i][j],dp[i-f[k][l]][j-l]+v[k]-f[k][l]); 52 } 53 printf("%d",dp[V][cnt]); 54 return 0; 55 }
转载于:https://www.cnblogs.com/Slrslr/p/9671191.html
[P1860]新魔法药水相关推荐
- 洛谷P1860——新魔法药水
传送门:QAQQAQ 题意:商店里有N种药水,每种药水都有一个售价和回收价.小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水.他一天可以使用K次魔法,问他一天最多赚多少钱? N<=60 ...
- Luogu P1860 新魔法药水
DP 首先考虑如何将答案DP转移出来 记$dp[i][j]$表示使用了$i$次魔法,用了$j$个金币时的最大获利 因为可以将几个药水合成一个药水 那么在转移时会发现还需要处理出用了第$i$种药水由$j ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- C++学习笔记(第一、二阶段汇总)
文章目录 cmake 命名空间 匿名命名空间 C与C++混合编程 引用 共用体 inline内联函数 关于多次定义 class类初步了解 inline函数在c++中唯一一个多出来的特性 这个特性的目的 ...
- 洛谷—— P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...
- 「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水
佳佳的魔法药水 背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水--怎么样才能得到0号药水呢?你要知道佳佳的家境也 ...
- vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵
题目链接: https://vijos.org/p/1282 https://vijos.org/p/1283 https://vijos.org/p/1284 https://vijos.org/p ...
- P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...
最新文章
- Python调用大漠插件
- STM32开发 -- PMIC、I2C详解
- Ajax实现异步操作实例_针对XML格式的请求数据
- shell如何控制文件读写不同时_如何定时备份Mysql数据库数据?
- javascript中构造函数的说明
- ViT(Vision Transformer)学习
- 洛谷P3261 [JLOI2015]城池攻占(左偏树)
- linux系统可以装win10吗,如何在Win10专业版中安装Linux系统?
- 计算机课flash课件,初识flash动画教学课件
- VS Code插件安装位置
- html怎么修改网页背景色,CSS如何设置网页背景颜色、背景图片
- presentation健身主题HTML,如何用英文做presentation
- 例题4-6 师兄帮帮忙(A Typical Homework (a.k.a Shi Xiong Bang Bang Mang),Rujia Liu's Present 5, UVa 12412)
- 股票移动平均线matlab,移动平均线(MA)
- 永恒之蓝ms17_010漏洞利用攻击
- 必须来GeekPwn的十大理由
- numpy获取二维数组某一行、某一列
- java.io.IOException: Expected at least 2 bytes
- pwm一个时间单位_「硬见小百科」什么是PWM“死区”?
- Python-混合高斯分布(GMM)的应用及K-S检验