牛客網 Wannafly挑戰賽12-B T95要減肥

鏈接:https://www.nowcoder.com/acm/contest/79/B

舍友看題覺得是揹包問題,而實際上這個題沒有“容量”的相關概念,不是個揹包。具體分類應該分到貪心。話說這個變量數組開得挺大,一開始我還擔心繫統內存不夠,一度想用vector,後來覺得麻煩試着用數組結果還可以。。

思路:設置變量ans記錄結果,對a和b數組排序,a遞增序,b遞減序。tmp記錄選擇結果,每選3個a就選3個b,同時考慮一次m。在每次考慮完m之後更新ans(取最大)。如果n不是3的倍數,在循環完成後還需要對tmp和res進行比較大小更新res。

其實在tmp比上一次res小的時候後續的tmp只能減不會增了,後續再循環下去是浪費時間,直接break;

代碼:

#include <algorithm>
#include <cstdio>
using namespace std;
int a[1000010],b[1000010];
long long res = 0,tmp = 0;
bool cmp(int a,int b){
	return a > b;
}
int main(){
	int n,m,x = 0;
	scanf("%d%d",&n,&m);
	for(int i = 0;i < n;i++)scanf("%d",&a[i]);
	for(int i = 0;i < n;i++)scanf("%d",&b[i]);
	sort(a,a+n);
	sort(b,b+n,cmp);
	for(int i = 0;i < n;i++){
		tmp += b[i]-a[i];
		if(++x == 3){
			tmp += m;
			if(tmp < res)break;
			res = tmp;
			x = 0;
		}
	}
	res = max(res,tmp);
	printf("%lld\n",res);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章