排序法
用排序法常见的情况是输入一个包含几个(一般一到两个)权值的数组,通过排序然后遍历模拟计算的方法求出最优值。
有些题的排序方法非常显然,如 「USACO1.3」修理牛棚 Barn Repair 就是将输入数组差分后排序模拟求值。
#include <iostream> #include <algorithm> #include <stdlib.h> #include <bits/stdc++.h> using namespace std; bool cmp(int a,int b){ return a>b; } int main() { ios::sync_with_stdio(false); int m, s, c; cin >> m >> s >> c; int* cc = new int[c]; for (int i = 0; i < c; i++) { cin >> cc[i]; } if(m>c){ cout<<c<<endl; return 0; } sort(cc, cc + c); int ans=cc[c-1]-cc[0]+1; int* b = new int[c]; for(int i = 0; i < c; i++){ b[i] = cc[i+1]-cc[i]; } sort(b,b+c-1,cmp); for (int i = 0; i < m-1; i++) { ans=ans-b[i]+1; } cout<<ans<<endl; //system("pause"); }