USACO银牌题目 CF863B Kayaking (排序, 枚举, 暴力,DFS) 样例代码2
2022-07-16 10:41 作者:信奥赛USACO郑老师 | 我要投稿
#include <bits/stdc++.h>
using namespace std;
int d[50*2];
int cost=0;
int mincost=1e8;
void s(int k, int single, int n){
if(k>=2*n){
if(k==2*n && single==0){
mincost=min(mincost,cost);
}
return;
}
if(single>0){
s(k+1,single-1,n);
}
if(k<2*n-1){
cost+=d[k+1]-d[k];
s(k+2,single,n);
cost-=d[k+1]-d[k];
}
return;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<2*n;i++){
cin>>d[i];
}
sort(d,d+2*n);
s(0,2,n);
cout<<mincost<<endl;
return 0;
}