GCPC2018-训练补题14
# 组队排位赛14 GCPC2018
# Gym 102021G *
# Gym 102021J *
# Gym 102021K 背包Dp
裸的背包Dp:数组代表使用了根线,总长度为时的状态情况(0:不存在,1:存在)
复杂度(或)
bool dp[62][1401];
int n, g, len[62];
// ......
dp[0][0] = 1;
for(int i=0; i<n; i++){
int slen = len[i];
for(int j=59; j>=0; j--){
for(int k=1400-slen; k>=0; k--)
dp[j+1][k+slen] |= dp[j][k];
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# Gym 102021M 勇敢地暴力!
对点的高度进行排序,从低向高遍历,并尝试合并周围4个点:如果目标比自身低,则合并;否则不合并。
对于第个查询,如果发现待合并的两个连通块中都存在同一个编号,那么为当前点高度(注意特判的情况)。
我们可以使用list/set/unorder_set
维护各个连通块内的查询编号;用并查集维护连通性,当合并两个连通块时,合并两个list/set/unorder_set
(小的并入大的)。
不会TLE!
上次更新: 2021/02/24, 03:37:30