CF#715 div2

C. The Sports Festival
首先sort一下,用d[i][j]表示上场为s[i]到s[j]时的最小值。 ans=d[1][n],最后上场的肯定为最大最小值。

状态转移方程:d[i][j]=s[j]-s[i]+min(d[i+1][j],d[i][j-1]),只能从这两个状态得到。

边界:上场为一个人时,都为0,即d[i][i]=0

代码

int s[2005];
ll d[2005][2005];
int main()
{
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
	}
	sort(s + 1, s + n + 1);
	for (int i = 1; i <= n; i++) {
		d[i][i] = 0;
	}
	for (int dis = 1; dis < n; dis++) {
		for (int i = 1; i + dis <= n; i++) {
			d[i][i + dis] = s[i + dis] - s[i] 
				+ min(d[i + 1][i + dis], d[i][i + dis - 1]);
		}
	}
	cout << d[1][n];
}
  
原文地址:https://www.cnblogs.com/lingshi321/p/14672857.html