洛谷P1860 新魔法药水
2024-08-27 14:55:38
动态规划:
这个题目调了我好久。。。。结果循环变量写错了。。。
而且题目有个坑!!!只能用开始给你的$v$元买入东西
回归正题:
我们定义状态$ans[i][j]$表示第$i$个物品用了至多$j$次魔法的最小花费,但是我们发现这样子的话不好与合成关系联系在一起,那么我们再定义一个数组$f[i][j]$表示某一个合成关系中,前$i$个物品中用至多$j$次魔法合成的最小花费
那么最后就普通$dp$就行了
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x7f7f7f7f
#define M 300
#define K 31
using namespace std;
struct Magic
{
int to,num,thing[M];
}magic[M];
int n,m,v,k;
int pay[M],get[M],f[M][M],ans[M][M],dp[M][1007];
int main()
{
scanf("%d%d%d%d",&n,&m,&v,&k);
for(int i=1;i<=n;++i)
scanf("%d%d",&pay[i],&get[i]);
for(int i=1;i<=m;++i)
{
scanf("%d%d",&magic[i].to,&magic[i].num);
for(int j=1;j<=magic[i].num;++j)
scanf("%d",&magic[i].thing[j]);
}
for(int i=1;i<=n;++i)
for(int j=0;j<=k;++j)
ans[i][j]=pay[i];
for(int l=1;l<=k;++l)
{
for(int i=1;i<=m;++i)
{
for(int j=1;j<=magic[i].num;++j)
for(int o=0;o<l;++o)
{
f[j][o]=inf;
for(int oo=0;oo<=o;++oo)
f[j][o]=min(f[j][o],f[j-1][o-oo]+ans[magic[i].thing[j]][oo]);
}
ans[magic[i].to][l]=min(ans[magic[i].to][l],f[magic[i].num][l-1]);
}
}
// for(int i=1;i<=n;++i)
// {
// for(int j=1;j<=m;++j)
// printf("%d ",ans[i][j]);
// printf("\n");
// }
for(int i=1;i<=n;++i)
for(int j=0;j<=k;++j)
for(int o=0;o<=k-j;++o)
for(int l=ans[i][j];l<=v;++l)
dp[j+o][l]=max(dp[j+o][l],dp[o][l-ans[i][j]]+get[i]-ans[i][j]);
printf("%d",dp[k][v]);
return 0;
}
最新文章
- DataBase异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间
- jQuery 中对 CommonJs 的支持处理
- Mysql Communication link failure :1153 Got a packet bigger than &#39;max_allowed_packet&#39; bytes
- Android Material Design 学习笔记 - Matrial Theme
- 分享一个Mongodb PHP封装类
- makefile for VCS from Syn@psys
- 用JS实现避免重复加载相同js文件
- iOS学习之数据请求
- SSI框架总结
- 【转】centos安装vim7.4
- MYSQL数据库学习七 视图的操作
- ionic3 在windows环境下打包android 正式签名版APK
- springboot学习四:整合mybatis
- 细说MySQL表操作
- linux修改文件为可执行文件
- python正则表达式(四)
- MobaXterm的一些介绍(Top 5 SSH Clients for Windows (Alternatives of PuTTY))
- 第36-37 Tomcat & SVN
- <;Android 基础(三 十)>; Fragment (3) ~ PreferenceFragment
- 配置httpd2.4与常见的I/O模型说明