您的位置:首页 > 其它

UVALive - 6434 Number Assignment 【思维!】

2018-01-13 19:51 288 查看
传送门

// 题意: 给定n个数, 任意分成m份, 定义一份的cost为该份中的max - min , 如果一份只有一个元素, 那么其cost为0, 求min(sigma(cost));

// 思路: 我们排个序, 直接求每两个数之间的间隔, 实际上就是要将这些间隔中最大的m-1个删去, 剩下的每一份算算cost就行啦. 但是每一分的cost怎么算了, 我们想想着实际上不好算. 但是我们可以发现一份的cost就等于该份中包含的间隔之和就是! 也就是我们直接将所有间隔算出来后累加前面n-m个数就是答案 !

也是一道思维好题~~~

AC Code

const int maxn = 1e5+5;
int a[maxn], b[maxn];
void solve()
{
int n, m;
cin >> n >> m;
for (int i = 1 ; i <= n ; i ++) {
cin >> a[i];
}
sort(a+1, a+1+n);
int k = 0 ;
for (int i = 2 ; i <= n ; i++) {
b[++k] = a[i]-a[i-1];
}
sort(b+1, b+1+k);
int ans = 0;
for (int i = 1 ; i <= n - m ; i++) {
ans += b[i];
}
cout << ans << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: