11752 糖葫芦 模拟 排序 枚举

解决思路

 
  • 读取输入:读取糖果的数量 n 和每个糖果距左边第一颗糖果的距离。
 
  • 排序:对糖果的距离进行排序。
 
  • 枚举分割点:枚举两个分割点,将糖果分成三段,计算每段的长度,并求出总长度的最小值。
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 1e3 + 10;
    ll n, a[N], sum = LLONG_MAX;
    
    int main() {
        // 读取糖果的数量
        cin >> n;
        // 读取每个糖果距左边第一颗糖果的距离
        for (int i = 2; i <= n; i++) cin >> a[i];
        // 对糖果的距离进行排序
        sort(a + 1, a + 1 + n);
        
        // 枚举两个分割点,将糖果分成三段
        for (int i = 2; i <= n - 4; i++) {
            for (int j = i + 2; j <= n - 2; j++) {
                // 计算三段的长度
                ll length1 = a[i] - a[1];
                ll length2 = a[j] - a[i + 1];
                ll length3 = a[n] - a[j + 1];
                // 更新总长度的最小值
                sum = min(sum, length1 + length2 + length3);
            }
        }
        
        // 输出最小总长度
        cout << sum;
        return 0;
    }

     

posted @ 2024-09-30 16:49  CRt0729  阅读(23)  评论(0编辑  收藏  举报