吐槽:这题目起的好随便啊

原题

小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏。最近小明在玩一款新出的游戏,叫做■■■■■■■■。小明觉得游戏里自己的装备太垃圾了,每次都被大神虐,一怒之下充了■■元准备强化装备。
这个游戏中用于强化装备的道具叫做强化符文。有以下3 种:

  1. 赋值强化符文,对某个装备使用这个符文以后,装备威力值会变为一个常数。因为这个功能很IMBA,可以让一个垃圾装备变得非常牛■,所以它在游戏里很稀有,市场上最多能见到一个。
  2. 加法强化符文,对某个装备使用后,威力值加上一个常数。
  3. 乘法强化符文,对某个装备使用后,威力值乘上一个常数。
    市场上有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。

几个显然的事实

  1. 看看数据范围,n⩽2n\leqslant 2n⩽2,不用想,这肯定是题目的切入点 。
  2. a(bx+c)>ab(x+c)a(bx+c) >ab(x+c)a(bx+c)>ab(x+c)所以加法应该优先于乘法使用,赋值优于加法
  3. 加、乘法都好,无论怎么分配,选权值大的就是王道

我一开始,以为答案是加起来,就无从下手。
后来,我才发现总威力是乘积。
那就很好办了。。。

首先,乘法无论作用于第一个还是第二个,效果是一样的。所以,乘法的问题可以单独解决。
其次,这题显然用DP,加法部分的结果含有乘法,不好处理,考虑到数据范围

输入数据中所有数不超过2000。

Ai+∑typei=2ciA_i+\sum_{type_{i}=2} c_{i}Ai​+∑typei​=2​ci​不会超过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

  1. 加、乘法都好,无论怎么分配,选权值大的就是王道

按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相关推荐

  1. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  2. 【五校联考6day2】er

    Description 小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏.最近小明在玩一款新出的游戏,叫做■■■■■■■■.小明觉得游戏里自己的装备太垃圾了,每次都被大神虐,一怒之 ...

  3. [jzoj 4246] 【五校联考6day2】san {spfa+dfs/spfa+拓扑排序+dp}

    题目 Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能 ...

  4. jzoj 4246【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  5. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  6. 【五校联考6day2】yi

    Description 小明是■■■星际旅游公司的员工,负责安排飞船,有N 艘飞船由他管理,每艘飞船能容纳的人数都不同.今天小明被要求为一个去锑星的旅游团安排往返的飞船,旅游团有M人,小明希望用最少的 ...

  7. 4246. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  8. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  9. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

最新文章

  1. 使用python包faker生成仿真数据
  2. Matter App提供了一个由BCH推动的长格式博客平
  3. 实战Nginx与PHP(FastCGI)的安装、配置与优化
  4. 科大讯飞语音合成api
  5. linux 关闭密码复杂化,Linux系统设置复杂密码策略方法
  6. 【HDU - 3714 】Error Curves (三分)
  7. 微服务 mysql 连接池_【mysql】druid,连接池和微服务的问题
  8. python变量存为matlab,将matlab变量导出为python用法的文本
  9. 文件加密系统,随时保护终端数据安全
  10. 认识端口与计算机入侵防范
  11. java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?
  12. c语言编程基础实验结果与分析,C语言实验指导1--C语言编程基础.doc
  13. [国家集训队]middle——中位数思维题
  14. 电阻转换温度值c语言,PT1000电阻值转化为温度值的计算公式
  15. 为什么在太阳能应用中使用气象站
  16. confluence
  17. Win7和CentOS7双系统修复引导
  18. 小白鼠与毒药解题过程分析
  19. 内核程序临界区和普通临界区
  20. 联通物联卡流量查询、充值的操作方法

热门文章

  1. 用AI给裸女自动“穿”上比基尼,妈妈再也不担心我“辣眼睛”了
  2. spssχ2检验_一致性检验和配对卡方检验的SPSS实例操作图文详解
  3. MySQL实战中,Insert语句的使用心得总结,字节跳动Java金三银四解析
  4. springboot项目使用beetl模板引擎生成word文件
  5. 战略上藐视技术,战术上重视技术
  6. 视频教程-手机游戏开发 libGDX1.4.1项目实战 微信打飞机-其他
  7. 软件安全技术复习内容
  8. linux 使用 go get 报 unrecognized import path “golang.org/x/crypto/XXX“ 的解决方法及手动安装 golang.org/x 包方法
  9. 这些Borland时代的大牛,你认识几个?
  10. 关于安卓19的板子通过usb连接打印机打印问题 (非小票打印机器)