Educational Codeforces Round 61 部分题解

BG


cf还没紫,决心今晚要上分(flag

A - Regular Bracket Sequence


sb题目,cnt2没用扔了,然后比较1和4,1和3的大小就可以了

B - Discounts


sb题目,排序然后第qi个就是答案了

C - Painting the Fence


设f[i,j]表示前i个位置选了至多j个线段的答案,我们记l[x]表示位置x最右可以到哪里,那么转移
f[i][j]->f[i+1][j]
f[i][j]->f[i][j+1]
f[i][j]+l[i]-i+1->f[i+l[i]][j+1]
因为n2所以可以随便预处理

D - Stressful Training


//我竟然不会做。。。写了一个假的二分答案贪心结果样例都没过就扔了
看了一眼别人的代码,发现响法是对哒
具体来说,我们二分一个答案mid,然后维护一个剩余时间为权的小根堆,每次取堆顶续一口再塞回去
一开始的想法是维护一个整体减法标记,现在想想不需要的。我们只需要假定它没有掉电然后只计算剩余时间就可以了

E - Knapsack


之前见过类似的没有去写,昨天rush出来的时候结果断网了。。血亏

这是一个多重背包问题,但是体积的值域和价值的值域都很大
考虑贪心,我们按照价值/体积排序贪心地塞满一个背包,这样是错的因为有的时候没有完全利用空间
因此我们可以做8* 8* 8个物品的多重背包,这样体积和价值值域都很小,枚举这个背包的某一个答案,用剩余空间贪心地装满
证明的话可以意识流一波

F - Clear the Sring


设f[i,j]表示i到j涂完的最小步数,我们枚举断点、特判s[i]=s[j]的情况就可以了

G - Greedy Subsequences


没写,等着填坑

你可能感兴趣的:(c++,codeforces)