考前codeforces泛做

100851 A H K
100837 A G
100796 D
100783 E A
100753 D J K
100200 E G H
100202 A C
100726 B C
100651 B F
100641 A C D F
100644 C G
100197 C

557E
225C
526E
19B
526E

CERC 07 Gates of Logic

----------DP----------

543A 100431F
106C 100417H
148E 100365F
225C 100365H

100923 B G F

449A 569D 643F

------日常模拟------
416D 19B
669 B C D E
100851 F B C

-----其它糊做-----
724D 731 D E F

19B
题意:给\(n\)个物品,每个物品有两个权值\(t_i\)\(p_i\),分别表示选了此物品后可以延长\(t_i\)的时间;选此物品需要花费\(p_i\)。选一件物品需要用1单位时间。问选完\(n\)件物品的最小花费。
sol:一句话题意以后就不那么隐蔽的背包问题。设\(d[i][j]\)表示选完前\(i\)件物品,还剩\(j\)单位时间的最小花费。显然有$$d[i][j] = \min{d[i-1][j], d[i-1][j-t_i-1] + c[i]}$$滚不滚动都无所谓咯。

724D
链接:http://codeforces.com/contest/724/problem/D
sol:原本的想法是按字典序依次考虑每个字符。然而这样就需要维护每个字符的占用情况,比较麻烦。注意到如果我们需要选字符\(x\)且需要选大于\(x\)的字符,则所有\(x\)都要选上。这样才能保证字典序最小。于是我们从左到右考虑每\(m\)个字符。在这\(m\)个字符中选出最小的字符中最靠后的那个(喷泉贪心),然后把指针变成这个字符的位置+1,下一轮就考虑从这个位置往后的\(m\)个字符即可。输出时,小于最大所选字符的要全选;最大所选字符只需选必须选的。

posted @ 2016-10-16 23:27  Armeria  阅读(158)  评论(0编辑  收藏  举报