zoukankan      html  css  js  c++  java
  • 【五校联考6day2】er

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

    1. 赋值强化符文,对某个装备使用这个符文以后,装备威力值会变为一个常数。因为这个功能很IMBA,可以让一个垃圾装备变得非常牛■,所以它在游戏里很稀有,市场上最多能见到一个。
    2. 加法强化符文,对某个装备使用后,威力值加上一个常数。
    3. 乘法强化符文,对某个装备使用后,威力值乘上一个常数。
      市场上有M 个不同强化符文可以购买,小明有N 件装备准备强化,他只能购买K 个强化符文,然后以任意顺序使用这些符文,强化他的任意装备(一个装备可以不强化也可以强化多次)。根据游戏的设定,所有装备威力值乘积为总效果。请为他设计一个购买和强化方案,使强化后的所有装备总效果值最大。
      由于小明RP 不太好,打BOSS 都不掉神装,所以他的装备不超过两件。

    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 4
    3 2

    Sample Output
    4.159

    Data Constraint
    对于20% 的数据,N = 1;
    对于全部数据M,K ≤ 100;N ≤ 2,最多一个Type_i = 1。
    输入数据中所有数不超过2000。

    .
    .
    .
    .
    .
    .
    分析
    在这里插入图片描述

    .
    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    int n,m,k,v[3],tjj,tjc;
    long long fz,sumjia[200],jia[200],chen[200],f[200000];
    double ans,sumchen[200];
    
    bool cmp(int a,int b)
    {
    	return a>b;
    }
    
    void work1()
    {
    	for (int i=0;i<=min(tjj,k);i++)
    	{
    		ans=max(ans,log(v[1]+sumjia[i])+sumchen[k-i]);
    		ans=max(ans,log(fz+sumjia[i])+sumchen[k-i-1]);
    	} 
    	printf("%0.3lf",ans);
    }
    
    
    void work2()
    {
    	sumchen[0]=1;
    	f[0]=1;
    	for (int i=0;i<=min(tjj,k);i++)
    	{
    		for (int j=sumjia[tjj];j>=sumjia[i]-sumjia[i-1];j--)
    			f[j]=max(f[j],f[j-(sumjia[i]-sumjia[i-1])]);
    		if (k-i==tjc) sumjia[0]=0;
    		for (int x=0;x<=sumjia[i];x++)
    			if (f[x]>0&&f[sumjia[i]-x]>0)
    			{
    				long long w=sumjia[i]-x;
    				ans=max(ans,log(w+v[1])+log(x+v[2])+sumchen[k-i]);
    				ans=max(ans,log(w+v[1]+fz)+log(x+v[2])+sumchen[k-i-1]);
    				ans=max(ans,log(w+v[1])+log(x+v[2]+fz)+sumchen[k-i-1]);
    			}
    	}
    	printf("%0.3lf",ans);
    }
    
    int main()
    {
    	scanf("%d%d%d",&n,&m,&k);
    	for (int i=1;i<=n;i++)
    		scanf("%d",&v[i]);
    	for (int i=1;i<=m;i++)
    	{
    		int x,y;
    		scanf("%d%d",&x,&y);
    		if (x==1) fz=y;
    		if (x==2) jia[++tjj]=y;
    		if (x==3) chen[++tjc]=y;
    	}
    	sort(jia+1,jia+tjj+1,cmp);
    	sort(chen+1,chen+tjc+1,cmp);
    	sumjia[0]=0;
    	for (int i=1;i<=tjj;i++)
    		sumjia[i]=sumjia[i-1]+jia[i];
    	sumchen[0]=0;
    	for (int i=1;i<=tjc;i++)
    		sumchen[i]=sumchen[i-1]+log(chen[i]);
    	
    	if (n==1) work1();
    	if (n==2) work2();
    	return 0;
    }
    
  • 相关阅读:
    linux基本命令
    操作系统
    罗马数字和整型的关系
    LightOJ 1234 Harmonic Number(打表 + 技巧)
    LightOJ 1236 Pairs Forming LCM (LCM 唯一分解定理 + 素数筛选)
    LightOJ 1245 Harmonic Number (II)(找规律)
    LightOJ 1259 Goldbach`s Conjecture (哥德巴赫猜想 + 素数筛选法)
    LightOJ 1282 Leading and Trailing (快数幂 + 数学)
    LightOJ 13361336
    hdu 5510 Bazinga
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/10458933.html
Copyright © 2011-2022 走看看