题目大意:
有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
原文:https://www.cnblogs.com/myrcella/p/12344219.html