生活随笔
收集整理的這篇文章主要介紹了
【五校联考6day2】er
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
小明在業余時間喜歡打電子游戲,不是星際和魔獸這些,是賽爾號一類的游戲。最近小明在玩一款新出的游戲,叫做■■■■■■■■。小明覺得游戲里自己的裝備太垃圾了,每次都被大神虐,一怒之下充了■■元準備強化裝備。
這個游戲中用于強化裝備的道具叫做強化符文。有以下3 種:
賦值強化符文,對某個裝備使用這個符文以后,裝備威力值會變為一個常數。因為這個功能很IMBA,可以讓一個垃圾裝備變得非常牛■,所以它在游戲里很稀有,市場上最多能見到一個。加法強化符文,對某個裝備使用后,威力值加上一個常數。乘法強化符文,對某個裝備使用后,威力值乘上一個常數。
市場上有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;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/10458933.html
總結
以上是生活随笔為你收集整理的【五校联考6day2】er的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。