題目ios
打死我也沒想到是貪心git
雖然是lkx寫了貪心題解讓我去點讚我才寫的這道題數組
神仙思路spa
首先排好序code
假設咱們如今只有一塊木板blog
咱們作一個差分數組排序
對這個差分數組排序以後get
一次斷開最長的區間it
m-1次以後io
即可以獲得最小的啦
須要注意的是
此題有坑點須要特判提供的木板數比牛棚數還多的狀況
那種狀況直接就輸出牛棚的數量就好啦
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int N = 2100; int cow[N], m, s, c, cf[N], ans; int read() { int s = 0, w = 1; char ch = getchar(); while(!isdigit(ch)) {if(ch == '-') w = -1; ch = getchar();} while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = getchar();} return s * w; } bool cmp(int x, int y) { return x > y; } int main() { m = read(), s = read(), c = read(); for(int i = 1; i <= c; i++) cow[i] = read(); if(m > c) { printf("%d\n", c); return 0; } sort(cow + 1, cow + 1 + c); ans = cow[c] - cow[1] + 1; for(int i = 2; i <= c; i++) cf[i] = cow[i] - cow[i - 1]; sort(cf + 2, cf + c + 1, cmp); for(int i = 2; i <= m; i++) ans = ans - cf[i] + 1; printf("%d\n", ans); return 0; }
謝謝收看,祝身體健康!