JZOJ 4245【五校联考6day2】er
吐槽:这题目起的好随便啊
原题
小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏。最近小明在玩一款新出的游戏,叫做■■■■■■■■。小明觉得游戏里自己的装备太垃圾了,每次都被大神虐,一怒之下充了■■元准备强化装备。
这个游戏中用于强化装备的道具叫做强化符文。有以下3 种:
- 赋值强化符文,对某个装备使用这个符文以后,装备威力值会变为一个常数。因为这个功能很IMBA,可以让一个垃圾装备变得非常牛■,所以它在游戏里很稀有,市场上最多能见到一个。
- 加法强化符文,对某个装备使用后,威力值加上一个常数。
- 乘法强化符文,对某个装备使用后,威力值乘上一个常数。
市场上有M 个不同强化符文可以购买,小明有N 件装备准备强化,他只能购买K 个强化符文,然后以任意顺序使用这些符文,强化他的任意装备(一个装备可以不强化也可以强化多次)。根据游戏的设定,所有装备威力值乘积为总效果。请为他设计一个购买和强化方案,使强化后的所有装备总效果值最大。
由于小明RP 不太好,打BOSS 都不掉神装,所以他的装备不超过两件。
题目大意(有改动) |
---|
给你一个含N个元素的序列(N⩽2)(N\leqslant2)(N⩽2),有m个修改操作,每个操作有两个参数:type,c。 |
当type=1时,表示把某元素赋为c |
当type=2时,表示把某元素加上c |
当type=3时,表示把某元素乘上c |
求使用k个不同操作可以获得的序列元素乘积的最大值,值可能很大,请输出ln(ans)\ln(ans)ln(ans) |
Input
第一行3 个正整数N;M;K, 含义见题面。
第二行N 个正整数Ai,表示他的每个装备的初始威力值。
第三行开始共M 行,每行两个正整数Type_i;Ci,描述一个强化符文。Type_i表示符文类型,1 表示赋值,2 表示加法,3 表示乘法。Ci 是对应的常数值。
Output
一个数,表示最大的总效果值。由于这个数可能很大,请输出它的自然对数,保留3 位小数。
Sample Input
2 5 3
0 1
2 3
2 1
2 4
3 2
Sample Output
4.159
Data Constraint
对于20% 的数据,N = 1;
对于全部数据M,K ≤ 100;N ≤ 2,最多一个Type_i = 1。
输入数据中所有数不超过2000。
几个显然的事实
- 看看数据范围,n⩽2n\leqslant 2n⩽2,不用想,这肯定是题目的切入点 。
- a(bx+c)>ab(x+c)a(bx+c) >ab(x+c)a(bx+c)>ab(x+c)所以加法应该优先于乘法使用,赋值优于加法
- 加、乘法都好,无论怎么分配,选权值大的就是王道
我一开始,以为答案是加起来,就无从下手。
后来,我才发现总威力是乘积。
那就很好办了。。。
首先,乘法无论作用于第一个还是第二个,效果是一样的。所以,乘法的问题可以单独解决。
其次,这题显然用DP,加法部分的结果含有乘法,不好处理,考虑到数据范围
输入数据中所有数不超过2000。
Ai+∑typei=2ciA_i+\sum_{type_{i}=2} c_{i}Ai+∑typei=2ci不会超过2000×100=2000002000\times 100=2000002000×100=200000
如果设fi,jf_{i,j}fi,j表示选了iii个,A1=jA_1=jA1=j,A2A_2A2的最大值。
不仅空间复杂度可行,也顺便解决了乘法难转移的问题。
只是时间复杂度。。。。
O(n2∑ci)O(n^2\sum c_i)O(n2∑ci)
凉定了?????
NO
- 加、乘法都好,无论怎么分配,选权值大的就是王道
按typetypetype为第一关键字ccc为第二关键字排序以后,不论选了几个,肯定都集中在前面。
时间复杂度降至O(n∑ci)O(n\sum c_i)O(n∑ci)
结果
爆0。。。
至于原因。。。
爆零部分代码:
while(type[i]<mt||(type[i]==mt&&c[i]>mc)) i++;while(type[j]>mt||(type[j]==mt&&c[i]<mt)) j--;// ^ ^^不爆0才怪
最终:
#include<cstdio>
#include<cstring>
#include<math.h>
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define ln(x) (log(x))
using namespace std;
int A[4];
int type[110],c[300];
long long f[110][200010];
double maxf[110];
void qsort(int l,int r)
{int i=l,j=r,mt=type[(l+r)/2],mc=c[(l+r)/2],t;while(i<=j){while(type[i]<mt||(type[i]==mt&&c[i]>mc)) i++;while(type[j]>mt||(type[j]==mt&&c[j]<mc)) j--;if(i<=j){t=type[i];type[i]=type[j];type[j]=t;t=c[i];c[i]=c[j];c[j]=t;i++;j--;}}if(i<r) qsort(i,r);if(l<j) qsort(l,j);
}
int main()
{//freopen("er.in","r",stdin);//freopen("er.out","w",stdout);int n,m,k,i,j,sta;double nans=0;scanf("%d%d%d",&n,&m,&k);A[2]=1;for(i=1;i<=n;i++) scanf("%d",&A[i]);for(i=1;i<=m;i++) scanf("%d%d",&type[i],&c[i]);qsort(1,m);memset(f,-1,sizeof(f));maxf[0]=ln(A[2]*A[1]);f[0][A[1]]=A[2];for(i=1;i<=k;i++){if(type[i]>2) break;if(type[i]==1) for(j=0;j<=c[i];j++) f[i][c[i]]=max(f[i][c[i]],f[i-1][j]);for(j=0;j<=200000;j++){if(type[i]==1&&f[i-1][j]>=0&&n==2) f[i][j]=max(f[i][j],c[i]);if(type[i]==2){if(j>=c[i]) f[i][j]=max(f[i-1][j-c[i]],f[i][j]);if(f[i-1][j]>=0&&n==2) f[i][j]=max(f[i][j],f[i-1][j]+c[i]);// printf("%d %d %d\n",i,j,f[i][j]);}}maxf[i]=-1000000.0;for(j=0;j<=200000;j++)if(ln(f[i][j]*j)>maxf[i]) maxf[i]=ln(f[i][j]*j);}for(sta=1;sta<=m;sta++)if(type[sta]>2) break;double sum=0,ans=0;for(i=m+1;i<=2*m;i++) c[i]=1;for(i=sta;i-sta<=k;i++){if(i-sta>k) break;nans=-10000000;for(j=0;j<=k-(i-sta);j++){nans=max(nans,maxf[j]);}if(ans<nans+sum)ans=nans+sum;sum=sum+ln(c[i]);}printf("%.3lf\n",ans);return 0;
}
JZOJ 4245【五校联考6day2】er相关推荐
- 4246. 【五校联考6day2】san (Standard IO)
4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits D ...
- 【五校联考6day2】er
Description 小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏.最近小明在玩一款新出的游戏,叫做■■■■■■■■.小明觉得游戏里自己的装备太垃圾了,每次都被大神虐,一怒之 ...
- [jzoj 4246] 【五校联考6day2】san {spfa+dfs/spfa+拓扑排序+dp}
题目 Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能 ...
- jzoj 4246【五校联考6day2】san
Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...
- 【五校联考6day2】san
Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...
- 【五校联考6day2】yi
Description 小明是■■■星际旅游公司的员工,负责安排飞船,有N 艘飞船由他管理,每艘飞船能容纳的人数都不同.今天小明被要求为一个去锑星的旅游团安排往返的飞船,旅游团有M人,小明希望用最少的 ...
- 4246. 【五校联考6day2】san
Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...
- 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...
2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...
- jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)
jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...
最新文章
- 使用python包faker生成仿真数据
- Matter App提供了一个由BCH推动的长格式博客平
- 实战Nginx与PHP(FastCGI)的安装、配置与优化
- 科大讯飞语音合成api
- linux 关闭密码复杂化,Linux系统设置复杂密码策略方法
- 【HDU - 3714 】Error Curves (三分)
- 微服务 mysql 连接池_【mysql】druid,连接池和微服务的问题
- python变量存为matlab,将matlab变量导出为python用法的文本
- 文件加密系统,随时保护终端数据安全
- 认识端口与计算机入侵防范
- java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?
- c语言编程基础实验结果与分析,C语言实验指导1--C语言编程基础.doc
- [国家集训队]middle——中位数思维题
- 电阻转换温度值c语言,PT1000电阻值转化为温度值的计算公式
- 为什么在太阳能应用中使用气象站
- confluence
- Win7和CentOS7双系统修复引导
- 小白鼠与毒药解题过程分析
- 内核程序临界区和普通临界区
- 联通物联卡流量查询、充值的操作方法
热门文章
- 用AI给裸女自动“穿”上比基尼,妈妈再也不担心我“辣眼睛”了
- spssχ2检验_一致性检验和配对卡方检验的SPSS实例操作图文详解
- MySQL实战中,Insert语句的使用心得总结,字节跳动Java金三银四解析
- springboot项目使用beetl模板引擎生成word文件
- 战略上藐视技术,战术上重视技术
- 视频教程-手机游戏开发 libGDX1.4.1项目实战 微信打飞机-其他
- 软件安全技术复习内容
- linux 使用 go get 报 unrecognized import path “golang.org/x/crypto/XXX“ 的解决方法及手动安装 golang.org/x 包方法
- 这些Borland时代的大牛,你认识几个?
- 关于安卓19的板子通过usb连接打印机打印问题 (非小票打印机器)