分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样)
这样想的话,就是如何把这n-1个值分成 k份,使得和最小,那么就是简单的排序,去掉前k大的(注意longlong)
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <map> #include <queue> #include <vector> using namespace std; typedef long long LL; const int N = 1e5+10; int a[N]; int main(){ int T,n,k; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); for(int i=1;i<n;++i) scanf("%d",&a[i]); LL ret=0; if(n<=k)ret+=n; else{ sort(a+1,a+n); for(int i=1;i<=n-k;++i)ret+=a[i]+1; ret+=k; } printf("%I64d\n",ret); } return 0; }
时间: 2024-10-06 04:37:58