HDU5777 domino (BestCoder Round #85 B) 思路题+排序

分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样)

        这样想的话,就是如何把这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
",ret);
  }
  return 0;
}
View Code
原文地址:https://www.cnblogs.com/shuguangzw/p/5722904.html