题目描述

商店里有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]新魔法药水相关推荐

  1. 洛谷P1860——新魔法药水

    传送门:QAQQAQ 题意:商店里有N种药水,每种药水都有一个售价和回收价.小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水.他一天可以使用K次魔法,问他一天最多赚多少钱? N<=60 ...

  2. Luogu P1860 新魔法药水

    DP 首先考虑如何将答案DP转移出来 记$dp[i][j]$表示使用了$i$次魔法,用了$j$个金币时的最大获利 因为可以将几个药水合成一个药水 那么在转移时会发现还需要处理出用了第$i$种药水由$j ...

  3. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

  4. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  5. C++学习笔记(第一、二阶段汇总)

    文章目录 cmake 命名空间 匿名命名空间 C与C++混合编程 引用 共用体 inline内联函数 关于多次定义 class类初步了解 inline函数在c++中唯一一个多出来的特性 这个特性的目的 ...

  6. 洛谷—— P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...

  7. 「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水

    佳佳的魔法药水 背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水--怎么样才能得到0号药水呢?你要知道佳佳的家境也 ...

  8. vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵

    题目链接: https://vijos.org/p/1282 https://vijos.org/p/1283 https://vijos.org/p/1284 https://vijos.org/p ...

  9. P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...

最新文章

  1. mysql程序语句范文,SQL语句(MySQL)
  2. linux版视频转换软件,居家旅行必备的Linux视频转换工具
  3. mysql字段说明_mysql 字段类型说明
  4. 用ab进行POST,GET压力测试,且定义header及json的内容
  5. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
  6. php 空函数,PHP 中函数 isset(), empty(), is_null() 的区别
  7. linux进程socket通信,linux进程间通信--socket套接字 实例代码
  8. centos中mysql操作命令,Linux系统中MySQL的常用操作命令
  9. Module database cache not built yet, using slow search
  10. 程序员项目_您如何让程序员加入您的项目?
  11. Python 绑定:从 Python 调用 C 或 C++
  12. python 条形图 负值_Python处理JSON数据并生成条形图
  13. easyui datagrid加载本地数据和网络数据
  14. 基于OpenCV的三维数据点的曲面重构_MySurefaceReconstruction
  15. MATLAB函数的求导(一阶、高阶、参数方程求导实例)
  16. alfafile中转站免费_免费、不限速的文件中转站or网盘
  17. Springboot入门级教程详解
  18. 词法分析之LED文件批量生成
  19. 使用安卓手机上的shh软件ConnectBot管理您的Linux服务器
  20. Pandas 基础知识

热门文章

  1. 电影 -- 碟中谍4
  2. Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]
  3. 计算机术语中分辨率是什么意思,分辨率是什么?分辨率是什么意思?
  4. Android 联想K5 Play 8.0 Notification突破拦截(vdex反编译 )
  5. Word2010 下划线字体距离的调整方法
  6. Linux卸载挂载点时,会遇到“device is busy”提示
  7. 数仓经典案例-各个视频平均完播率、平均播放进度
  8. 计算机二级C语言操作题怎么做?注意事项(难点易错点总结笔记)
  9. java获取周一0点
  10. 前端js 下载xls表格