「算法」贪心

证明方法

\(1.\)反证法:交换当前状态下的两个元素后,答案不会变得更优,则当前状态已经是最优解

\(2.\)归纳法:先证明边界\(n=1\)成立,再证明\(F_n\)成立时\(F_{n+1}\)成立

常见类型

交换邻项排序贪心

例题

[NOIP2012 提高组] 国王游戏

\(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\)项做不做时,若任务安排满了,则判断能否替换当前价值最小的已做的工作

posted @ 2021-09-22 16:57  lovelyred  阅读(37)  评论(0编辑  收藏  举报