XJOI游戏

Description

暑假到了,次方又可以打网络游戏了。然而在一堆玩家中选择哪些人来刷副本可是一件伤脑筋的事。
现在有n个人,如果同时选择了i和j这两个人,则会产生Aij的战斗力加成。但是如果一共选择了k个人,那么会造成k*(200-k)的网络延迟。团队的总战斗力定义为所有人之间的战斗力加成的和/总的网络延迟。
次方想知道能得到的最大的战斗力是多少。

Input

第一行,一个整数n,表示总人数。
下面n行,每行n列,第i行第j列的元素Aij(0<=Aij<10)表示同时选择i和j带来的战力加成。(Aij=Aji,Aii=0)

Output

一行一个实数,表示战斗力值,保留五位小数。

Sample Input

3
0 7 1
7 0 2
1 2 0

Sample Output

0.01768

HINT

对于30%的数据,有N<=15 
对于100%的数据,有N<=50。

题解:

根据数据决定算法。

对于30%的较小数据,采用一定正确的暴力搜索,对于后70%——

模拟退火!

通过random来决定这一次操作是加入一个人还是去除一个人。

若执行这次操作后价值比原来优,则接受;若不如原来优,则以一定的几率t接受这个操作,随搜索的进行,几率t越来越小。

玄学搜索,大致原理是距离答案较远时盲目找,距离答案较近时尽量贪心的找。

代码:

uses math;
var
  a:array[0..50,0..50]of longint;
  bo,q:array[0..50]of longint;
  i,j,k,l,n,m:longint;
  ans:extended;
procedure work;
var last,tmp,cnt,p,x,del,i:longint;
  t:extended;
begin
  last:=0; cnt:=0; t:=1;
  while t>0.00000001 do
  begin
    if random(2)=0 then
    begin
      if cnt=0 then continue;
      x:=random(n)+1;
      if bo[x]=1 then
      begin
        del:=0;
        for i:=1 to n do if bo[i]=1 then del:=del+a[i,x];
        tmp:=last-del;
        if((cnt-1>0)and(ans<tmp/((200-cnt+1)*(cnt-1))))or
        (random(10000)/10000<t)then
        begin
          last:=tmp; if cnt-1>0 then ans:=tmp/((200-cnt+1)*(cnt-1));
          dec(cnt); bo[x]:=0;
        end;
      end;
    end else
    begin
      if cnt=n then continue;
      x:=random(n)+1;
      if bo[x]=0 then
      begin
        del:=0;
        for i:=1 to n do if bo[i]=1 then del:=del+a[i,x];
        tmp:=last+del;
        if(ans<tmp/((200-cnt-1)*(cnt+1)))or(random(10000)/10000<t)then
        begin
          last:=tmp; ans:=tmp/((200-cnt-1)*(cnt+1));
          inc(cnt); bo[x]:=1;
        end;
      end;
    end;
    t:=t*0.99999;
  end;
end;
procedure ss(x,y,z:longint);
var i:longint;
begin
  if x>n then
  begin
    if y>0 then ans:=max(ans,z/(y*(200-y)));
    exit;
  end;
  ss(x+1,y,z);
  for i:=1 to x-1 do
  if bo[i]=1 then z:=z+a[x,i];
  bo[x]:=1; ss(x+1,y+1,z); bo[x]:=0;
end;
begin
  randomize;
  readln(n);
  for i:=1 to n do for j:=1 to n do read(a[i,j]);
  if n<=15 then ss(1,0,0)else work;
  writeln(ans:0:5);
end.

时间: 2024-08-08 09:40:23

XJOI游戏的相关文章

XJOI 游戏

题目大意: Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/(2^p)的概率完成并得到2^(p-1)分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流做任务,她可以选择任意一个任务来做:而Bob只会做难度为1的任务.只要其中有一个人达到n分,即算作那个人胜利.求Alice采取最优策略的情况下获胜的概率. 数据范围: n<=500 (本题输出小数即可) 这题正解是概率dp 设f[i][j]表示Alice此时i分,Bob此时j分,Alic

XJOI xtx的游戏(计算几何)

题意非常清真,给你一堆点和一个圆半径,选一个圆心让覆盖的点的点权和最大 首先,傻傻的做法,暴力微分枚举点,暴力统计答案.玄学复杂度 这个傻傻的代码虽然不是重点,还是贴一张图片吧 然后开始糊正解,正解,正解! 思考一个圆覆盖的点集,肯定可以通过某种变换让两个点在圆上且包含的点不变 分类讨论: 1.两个点刚开始就在圆上 2.一个点在圆上,绕该点旋转圆,第一个点碰到边界时停下,转化为1 3.无点在圆上,先平移,第一个点碰到边界时停下,转化为2 于是,上述结论证明了. /----------------

20170913自制猜数字游戏

/* 猜数字:系统随机生成一个四位数,请根据下列判断猜出来 A:数值正确,位置正确 B:数值正确,位置不正确 C:数值不正确 */ #include<stdio.h> #include<time.h> #include<stdlib.h> #pragma warning (disable:4996) #define pUCharHead unsigned char * //以数组形式返回n个无重复的随机数,范围可指定[min,max] pUCharHead GenNoR

洛谷P1199 三国游戏

题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之间有一个"默契值",表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军

游戏开发 系统app开发游戏定制开发找谁

梦幻珍珠港理财拆分游戏系统软件开发怎么做?找[江生:185-2911-8412 微电]. 梦幻珍珠港拆分游戏平台开发.梦幻珍珠港理财全网模式开发.梦幻珍珠港收益模式介绍开发. 梦幻珍珠港拆分游戏系统源码搭建平台!!我们是软件开发,玩家勿扰!非平台客服,玩家勿扰!] 游戏规则: 一.开发新会员要从您的库房扣除3 03颗珍珠,体系扣除5颗珍珠,新会员有298颗珍珠. 二.推荐老友,推荐人能够得到第一代会员的2%,第二代会员的1%,第三代会员的0.5%,一代的收益就是5.96颗珍珠奖赏(可转换为等量可

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

赛码网算法: 格子游戏

格子游戏 题目描述 有n个格子,从左到右放成一排,编号为1-n.共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值.对于每个2.3操作输出你所求出的结果. 输入输入第一行两个整数,n表示格子个数,m表示操作次数,n和m中间用空格隔开:接下来输入n行,每行一个整数表示一个格子的权值接下来输入m行,每行有三个整数,中间用空格隔开:第一个是选择的操作类型1-3,第二和第三个整数是操作格子的编号.样例输入3 37892 1 33 1 32 1 2输

【BZOJ4945】[Noi2017]游戏 2-SAT

[BZOJ4945][Noi2017]游戏 题目描述 题解:2-SAT学艺不精啊! 这题一打眼看上去是个3-SAT?哎?3-SAT不是NPC吗?哎?这题x怎么只有8个?暴力走起! 因为x要么不是A要么不是B,所以直接2^8枚举所有x就行了.然后就变成了一个2-SAT问题.假设有两场游戏1,2,分别可以使用的地图为A1,A2,B1,B2,如果有一个限制是1 A 2 A,那么选A1就必须选A2,然后我这个沙茶就开开心心的拿了55分. 为什么不对?我建出来的图显然不对偶啊!考虑逆否命题,选A1就必须选

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 B

<神无月>作为盛大游戏2017年的全新原创大作,其开发团队在自研实力强大的传世工作室基础之上,还有美树本晴彦等日本一线知名画师及日本游戏音乐大师崎元仁加盟参与制作.目前正在不限号内测中,有很多玩家进入到神无月的世界中. 在神无月中,有着玩家之间切磋的排位赛,其段位主要分为五大段位,从低到高依次为:新兵.菁英.战将.统帅.王者.每个玩家只有从新兵段位慢慢努力,一点点晋级才能到达王者段位.成为一个王者是每一个玩家的追求和心愿. 假设神无月的段位系统如下: 从低到高的段位依次简记为:D.C.B.A.