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)个字符即可。输出时,小于最大所选字符的要全选;最大所选字符只需选必须选的。