# Greedy# Iteration# Optimization# Quadratic Function

f312 - 1. 人力分配

🔗 前往 ZeroJudge 原題

題目描述

題目要求在兩個工廠之間分配 n 個員工,使得總收益最大化。工廠一和工廠二的收益分別由二次函數計算,需要找到最佳的員工分配方案。

解題思路

由於員工總數 n 是固定的,分配給工廠一 x 個員工,則分配給工廠二的員工數為 n - x。問題可以轉化為找到一個 x 的值,使得工廠一和工廠二的總收益最大。由於收益函數是二次函數,我們可以通過迭代所有可能的 x 值(從 0 到 n)來找到最大收益。對於每個 x 值,計算兩個工廠的收益,然後將它們加起來。最後,選擇收益最大的 x 值。由於題目 n 的範圍較小 (1 <= n <= 100),因此暴力迭代是可行的。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
#define max( x, y ) ( ((x)>(y)) ? (x):(y) )
int main(){
	int a1,b1,c1,a2,b2,c2,n,ans=-100000;
	scanf("%d%d%d%d%d%d%d",&a1,&b1,&c1,&a2,&b2,&c2,&n);
	for(int i=0,r=n;i<=n;++i,--r){
		ans=max(ans,a1*i*i+b1*i+a2*r*r+b2*r);
	}
	printf("%d",ans+c1+c2);
}

Discussion