首页 > 其他 > 详细

Codeforces-1260E Tournament

时间:2020-02-22 13:02:44      阅读:59      评论:0      收藏:0      [点我收藏+]

题目大意:

  有n个人参加比赛,保证n是2的次方。他们的能力分别是1,2,...,n。每轮将所有人两两分组,淘汰掉每组中较弱的人。收买第i个人需要花费a[i],从而使得你的朋友在和他对阵是就算能力较弱也能赢。求让朋友拿到冠军的最小花费。

题目解法:

  假如我们的朋友是最强的选手,直接输入0即可。

  若非,首先我们需要注意到,我们必须收买最强的选手,因为他无法被其他任何人打败。为了最大化利用他,我们可以利用他打败其他n/2-1个选手并在最后一轮和我们的朋友对阵。倒数第二个对阵的人应该是除了刚才已被击败的n/2个人中最强的那一个。而他也能打败其他n/4-1个选手。以此类推。

  因此我们可以从后往前选择朋友的对手。dp(i,j)表示考虑到第j个选手,从后往前选了i个和朋友直接对阵的人且j-n的所有人都被直接或间接打败的最小花费。我们可以通过i计算出当前可以打败的人数(n/2+n/4+...)。假如选当前选手,那么可以从dp(i+1,j-1)+a[j]转移;如果目前打败的人数足够多,我们还可以跳过该选手从dp(i,j-1)直接转移。边界为当j为我们的朋友是dp(i,j)=0

Codeforces-1260E Tournament

原文:https://www.cnblogs.com/myrcella/p/12344219.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!