bzoj1237: [SCOI2008]配对

    xiaoxiao2021-03-27  28

    传送门 贪心排序。 然后可以yy出来在3个以内调整是最优的(我不会证系列) 然后就欢乐的结束了。

    #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define inf 1e12 #define ll long long using namespace std; ll a[100005],b[100005],f[100005]; int n; ll o(int x,int y){ if (a[x]==b[y]) return inf; return abs(a[x]-b[y]); } int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]); sort(a+1,a+n+1); sort(b+1,b+n+1); f[1]=o(1,1); f[2]=min(f[1]+o(2,2),o(1,2)+o(2,1)); for (int i=3;i<=n;i++){ f[i]=f[i-1]+o(i,i); f[i]=min(f[i],f[i-2]+o(i-1,i)+o(i,i-1)); f[i]=min(f[i],f[i-3]+o(i-2,i)+o(i-1,i-2)+o(i,i-1)); f[i]=min(f[i],f[i-3]+o(i-2,i)+o(i-1,i-1)+o(i,i-2)); f[i]=min(f[i],f[i-3]+o(i-2,i-1)+o(i-1,i)+o(i,i-2)); } if (f[n]>inf) printf("-1"); else printf("%lld",f[n]); }
    转载请注明原文地址: https://ju.6miu.com/read-664582.html

    最新回复(0)