[关闭]
@w616561153 2020-07-18T17:25:49.000000Z 字数 758 阅读 383
  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<queue>
  5. #include<vector>
  6. #include<iostream>
  7. #include<math.h>
  8. #include <map>
  9. #include<set>
  10. #define ll long long
  11. #define mid ((l+r)>>1)
  12. #define ls k<<1
  13. #define rs (k<<1)+1
  14. using namespace std;
  15. const int maxn=2e5+10;
  16. const ll inf=1e12;
  17. ll ai[maxn];
  18. ll dp[maxn];
  19. ll get(int a){
  20. ll ans=(ll)ai[a]+ai[a-1]-ai[a-2]+ai[a-3]-ai[a-4]-ai[a-5];
  21. return ans;
  22. }
  23. ll get1(int a){
  24. return (ll)ai[a]+ai[a-1]-ai[a-2]-ai[a-3];
  25. }
  26. int main( ){
  27. int t;
  28. scanf("%d",&t);
  29. while(t--){
  30. int n;
  31. scanf("%d",&n);
  32. for(int a=1;a<=n;a++) scanf("%lld",&ai[a]);
  33. sort(ai+1,ai+n+1);
  34. ll ans=0;
  35. for(int a=1;a<=n;a+=2) ans+=(ai[a+1]-ai[a]);
  36. for(int a=1;a<=n;a++) dp[a]=inf;
  37. dp[4]=get1(4);
  38. for(int a=6;a<=n;a+=2){
  39. ll ans1=get(a)+dp[a-6];
  40. ll ans2=dp[a-4]+get1(a);
  41. dp[a]=min(ans1,ans2);
  42. }
  43. ans+=dp[n];
  44. printf("%lld\n",ans);
  45. }
  46. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注