P1899 魔法物品
题目描述

//又是一个好(nan)题好(nan)题
//首先,普通物品一开始就卖掉就可以,因为它不会增值
//至于魔法物品
//如果一个魔法物品使用了卷轴后的价值减去买卷轴的钱还不如鉴定前的价值高,那么我们鉴定这个魔法物品是要亏本的
//这样的魔法物品我们把它称为假的魔法物品,当成普通物品处理就好
//否则如果鉴定之后可以赚钱,就把它称之为真的魔法物品 //后边怎么体现买了卷轴的时候有点绕,其实看看算魔法药品利润的那个式子就很好理解了 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<sstream>
using namespace std; const int N=;
const int M=1e7+; int n,P;
int allv,v;
//allv是所有魔法物品鉴定前和普通物品的价值的和, v是普通物品的价值和,是初始资金
int dp[M];
//dp[i]表示通过卖魔法物品得到i元钱所赔的最小利润的和
int mf,p1[N],profit[N];
//mf是真真的魔法物品的数量,p1是是鉴定前的价值,profit是鉴定后能获取的利润 int main()
{
string S;
scanf("%d%d",&n,&P);
getline(cin,S); //一定要用getline读换行,不要用getchar()
for(int i=;i<=n;++i)
{
stringstream s; //字符串流黑科技,不懂的百度
getline(cin,S); //读入这一行的内容
s<<S; //将字符串S转化成一个流字符串
int a,b;
s>>a; //第一个价值
allv+=a;
if(s>>b&&b-P-a>) //如果这是个真的魔法物品 s>>b表示这一行还有第二个数字,b-P-a>0表示鉴定之后能获得利润
{
++mf;
p1[mf]=a; //鉴定前价值
profit[mf]=b-P-a; //鉴定后价值
}
else //假的魔法物品,当成普通物品处理
v+=a;
}
// cout<<allv<<" "<<v;
if(v<P) //手中卖掉普通物品后的初始资金不够买卷轴
{
for(int i=;i<=allv-v;++i) //卖掉鉴定前的真的魔法物品最多可以获得allv-v元钱
dp[i]=;
for(int i=;i<=mf;++i) //枚举魔法物品个数
{
for(int j=allv-v;j>=p1[i];--j) //卖魔法药品得到j元钱要损失多少利益
{
dp[j]=min(dp[j],dp[j-p1[i]]+profit[i]); //求最少损失
}
}
int minn=;
for(int i=P-v;i<=allv-v;++i) //找最小损失 i=P-v是因为我们最少需要P-v元钱就可以买卷轴
minn=min(minn,dp[i]);
if(minn==) //卖完所有的魔法药品仍然买不了卷轴,那么只能全部按鉴定前价格出售
printf("%d",allv);
else //能买卷轴了
{
for(int i=;i<=mf;++i) //加上鉴定后能获得的的利润
allv+=profit[i];
printf("%d",allv-minn); //要减掉卖魔法物品的利润损失
}
}
else //不卖魔法药品就能买卷轴
{
for(int i=;i<=mf;++i) //加上利润
allv+=profit[i];
printf("%d",allv);
}
return ;
}
一种做法
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std; int n,p,x,y,sum1,sum2,sum3; //sum1是普通物品的价值和,sum2是真魔法物品鉴定前的价值和,sum3是真魔法物品鉴定后可以获得的利润和
int dp[]; //dp[i]表示花0->i元钱可以获得的最大利润
char c;
struct THI
{
int x,v;
THI(int x=,int v=):x(x),v(v){}
};
vector<THI> vec; //真·魔法物品 int main()
{
scanf("%d%d",&n,&p);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(c=getchar()==' ')
{
scanf("%d",&y);
if(y-x<=p) sum1+=x;
else sum2+=x,sum3+=y-x-p,vec.push_back(THI(x,y-x-p));
}
else sum1+=x;
}
if(sum1>=p) //初始资产能买到卷轴
{
printf("%d",sum1+sum2+sum3); //初始资产+魔法物品鉴定前价值和+鉴定后利润和
return ;
}
if(sum1+sum2<=p) //把普通物品和魔法物品全卖了也买不到卷轴
{
printf("%d",sum1+sum2); //那就全卖了吧
return ;
}
for(int i=;i<vec.size();i++) //找最大利润
for(int j=sum1+sum2-p;j>=vec[i].x;j--)
dp[j]=max(dp[j],dp[j-vec[i].x]+vec[i].v);
printf("%d",sum1+sum2+dp[sum1+sum2-p]);
return ;
}
也是一种做法
P1899 魔法物品的更多相关文章
- 魔法物品(magic.pas/c/cpp)
有两种类型的物品:普通物品和魔法物品.普通物品没有魔法属性,而魔法物品拥有一些魔法属性.每种普通物品有一个价值P,但每种魔法物品有两种价值:鉴定前的价值P.和鉴定后的价值P2(当然,P2总是大于P.) ...
- 【t073】&&【t015】魔法物品
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有两种类型的物品:普通物品和魔法物品.每种普通物品有一个价值P,但每种魔法物品有两种价值:鉴定前的价值 ...
- Phaser开源2d引擎 javascript/html5游戏框架
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
- akoj-1140-英雄联盟阵营
英雄联盟阵营 Time Limit:1000MS Memory Limit:65536KTotal Submit:54 Accepted:16 Description 符文之地——瓦罗兰,作为最大的 ...
- NOIP2016游记(非题解)
去年的比赛现在来发是不是晚了. -------------------------------- Day1-白天 出发啦, 动车购票处一群丧病的又在玩售票机 动车上看到胡神打苍蝇 苍蝇打苍蝇 在车上颓 ...
- entity framework core 支持批量插入,值得期待
entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(ht ...
- 洛谷 P2119 魔法阵
题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有mm个魔法物品,编号分别为1,2,...,m1,2,...,m.每个物品具有一个魔法值,我们用X_iXi ...
- [luogu2119]魔法阵 NOIP2016T4
很好的一道数学推导题 45分做法 $O(N^4)$暴力枚举四个材料 55分做法 从第一个约束条件可得到所有可行答案都是单调递增的,所以可以排序一遍,减少枚举量,可以拿到55分 100分做法 首先可以发 ...
- 洛谷P2119 魔法阵
P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编 ...
随机推荐
- 使用Jenkins编译打包SpringCloud微服务中的个别目录
意义说明: 使用Jenkins从Gogs拉取SpringCloud微服务,拉取的是整个仓库的内容,分好多个模块文件夹,但是使用maven编译打包的话只编译打包指定的模块文件夹 Gogs Webhook ...
- Spring Cloud Alibaba学习笔记(6) - Sentinel使用总结
使用Sentinel API Sentinel主要有三个核心Api: SphU:定义资源,让资源收到监控,保护资源 SphU 包含了 try-catch 风格的 API.用这种方式,当资源发生了限流之 ...
- hdu1171 灵活的运用背包问题咯。。。 还有!!!! 合理的计算数组的范围!! wa了好多次!
Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...
- JMeter-03-元件的作用域与执行顺序
JMeter元件的作用域与执行顺序 元件的作用域 先来讨论一下元件有作用域.<JMeter基础元件介绍>一节中,我们介绍了8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样 ...
- C# 使用Berkeley DB
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间.简称BDB Berkeley DB是嵌入式键值数据库库,为应用程序提供可扩展的高性能数据管理服务. Berkeley DB ...
- javascript获取url参数的方式
方式一: 推荐使用此方式: url链接为:newsDetail.html?id=8a8080e35f90d9fd015f90dac7750001&modelId=123456 var URL ...
- 图片上传怎么用File接受文件
xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.——这才是真正的堪称强大!! - ...
- galera集群
一.环境准备 1.各主机配置静态域名解析: cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos ...
- python简单页面爬虫入门 BeautifulSoup实现
本文可快速搭建爬虫环境,并实现简单页面解析 1.安装 python 下载地址:https://www.python.org/downloads/ 选择对应版本,常用版本有2.7.3.4 安装后,将安装 ...
- Hystrix 熔断器
Hystrix 是Netflix开源的一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败 一.Hystrix 的定义 二.Hystrix 的原理 在分布式式系统中应用熔断器后,服务调用方可以自己 ...