洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair題解

題目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;
        
        
}

謝謝收看,祝身體健康!

相關文章
相關標籤/搜索