「算法」贪心
证明方法
\(1.\)反证法:交换当前状态下的两个元素后,答案不会变得更优,则当前状态已经是最优解
\(2.\)归纳法:先证明边界\(n=1\)成立,再证明\(F_n\)成立时\(F_{n+1}\)成立
常见类型
交换邻项排序贪心
例题
设\(p_1\)的参数为\(a_1,b_1\),\(p_2\)的参数为\(a_2,b_2\)
当\(p_1\)在前时,\(ans_1=max\{\frac{s}{b_1},\frac{s*a_1}{b_2}\}\)
当\(p_2\)在前时,\(ans_2=max\{\frac{s}{b_2},\frac{s*a_2}{b_1}\}\)
若\(p_1\)在前比\(p_2\)在前代价更大,则
\[ans_1>ans_2\\
max\{\frac{s}{b_1},\frac{s*a_1}{b_2}\}>max\{\frac{s}{b_2},\frac{s*a_2}{b_1}\}\\
\]
若\(\frac{s}{b_1}>\frac{s*a_1}{b_2}\),则\(ans_2=\frac{s*a_2}{b_1}>\frac{s}{b_1}\)不成立
所以\(\frac{s*a_1}{b_2}>\frac{s}{b_1}\),且\(\frac{s*a_1}{b_2}>\frac{s}{b_2}\)
那么满足\(p_1\)在前代价更大的条件是
\[\frac{s*a_1}{b_2}>\frac{s}{b_1}\\
\frac{s*a_1}{b_2}>\frac{s*a_2}{b_1}
\]
解得
\[a_1*b_1>a_2*b_2
\]
所以只要将大臣们按\(a_i*b_i\)从小到大排序即可
反悔贪心
[USACO09OPEN]Work Scheduling G
先假设所有工作都做,按截止时间排序后入队
判断第\(i\)项做不做时,若任务安排满了,则判断能否替换当前价值最小的已做的工作