1. 程式人生 > >BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(貪心)

BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(貪心)

castle con name 個數 blank 調整 can 貪心 pro

【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3399

【題目大意】 

  將一個集合調整成另一個集合中的數,把一個數+1需要消耗x,-1需要消耗y,問最小消耗。

【題解】

  顯然兩個集合排序之後一一對應調整需要消耗的才是最少的,所以排序計算答案即可。

【代碼】

#include <cstdio>
#include <algorithm>
using namespace std;
const int N=25010;
int a[N],b[N],n,x,y;
int main(){
    while(~scanf("%d%d%d",&n,&x,&y)){
       for(int i=0;i<n;i++)scanf("%d%d",&a[i],&b[i]);
       sort(a,a+n); sort(b,b+n); 
       int ans=0;
       for(int i=0;i<n;i++){
           if(a[i]<b[i])ans+=(b[i]-a[i])*x;
           else ans+=(a[i]-b[i])*y;
       }printf("%d\n",ans);
    }return 0;
}

BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(貪心)