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
// 题意: 给定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; }
相关文章推荐
- UVaLive LA 5052 UVa 1481 - Genome Evolution (很巧妙的思维)
- UVALive-7222 National Disaster【思维+排序+模拟】
- UVALive-7220 Dungeon Trap【最短路Bfs+思维枚举】好题~
- UVALive 7512 November 11th(模拟, 思维)
- UVALive - 7501 思维 +二分
- UVALive-7225 Summation and Divisor【Gcd+思维】
- UVALive - 3213 Ancient Cipher ( 思维 )
- Graveyard UVALive - 3708(思维)
- UVALive 6437 Power Plant 【最小生成树 + 思维】
- UVALive - 7501 思维 +二分
- UVALive 6439 Pasti Pas! 【思维】
- UVALive - 7501 思维 +二分
- UVALive 7339 Owllen【思维】
- hdu/3717//UVALive - 5012 Rescue 二分加思维
- UVALive 6442 Coins on a Ring (思维题)
- UVALive - 7501 思维 +二分
- Let's Go Green UVALive - 6039题解 思维图论
- 【思维-桶记录数组动态滚动】Encrypted Password UVALive - 6320
- UVALive - 6957Hyacinth (思维)
- UVaLive 7512 November 11th (思维漏洞)