Chgtaxihe's blog Chgtaxihe's blog
首页
练习
算法学习
读书笔记
小玩意

Chgtaxihe

首页
练习
算法学习
读书笔记
小玩意
  • 训练补题
  • Codeforces 刷题计划
  • 概率dp练习
  • dp专题练习
  • 数论练习
  • 搜索专题练习
  • 图论练习
  • 基础字符串练习
  • AtCoder练习
  • 题解们
  • solutions

  • 训练补题

    • 训练补题-个人1
    • 训练补题-个人10
    • 训练补题-个人2
    • 训练补题-个人5
    • 训练补题-个人6
    • 训练补题-个人8
    • 训练补题-个人9
    • 训练补题-牛客训练赛1
    • 训练补题-牛客训练赛10
    • 训练补题-牛客训练赛2
    • 训练补题-牛客训练赛3
    • 训练补题-牛客训练赛6
    • 训练补题-牛客训练赛6
    • 训练补题-牛客训练赛7
    • 训练补题-牛客训练赛8
    • 训练补题-牛客训练赛9
    • 训练补题-杭电多校10
    • 训练补题-杭电多校2
    • 训练补题-杭电多校3
    • 训练补题-杭电多校6
    • 训练补题-杭电多校9
    • NWERC 2018-训练补题11
    • SpbKOSHP 19-训练补题12
    • Gym102576-训练补题13
    • GCPC2018-训练补题14
      • Gym 102021G *
      • Gym 102021J *
      • Gym 102021K 背包Dp
      • Gym 102021M 勇敢地暴力!
    • Gym102202-训练补题15

GCPC2018-训练补题14

# 组队排位赛14 GCPC2018

题解 (opens new window)

# Gym 102021G *

# Gym 102021J *

# Gym 102021K 背包Dp

裸的背包Dp:数组Dp[i][j]=(0/1)Dp[i][j]=(0/1)Dp[i][j]=(0/1)代表使用了iii根线,总长度为jjj时的状态情况(0:不存在,1:存在)

复杂度O(1400n2)O(1400n^2)O(1400n2)(或O(gn2)O(gn^2)O(gn2))

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

# Gym 102021M 勇敢地暴力!

对点的高度进行排序,从低向高遍历,并尝试合并周围4个点:如果目标比自身低,则合并;否则不合并。

对于第iii个查询(p1,p2)(p1,p2)(p1,p2),如果发现待合并的两个连通块b1,b2b1,b2b1,b2中都存在同一个编号iii,那么ans[i]ans[i]ans[i]为当前点高度(注意特判p1=p2p1=p2p1=p2的情况)。

我们可以使用list/set/unorder_set维护各个连通块内的查询编号;用并查集维护连通性,当合并两个连通块时,合并两个list/set/unorder_set(小的并入大的)。

不会TLE!

上次更新: 2021/02/24, 03:37:30
Gym102576-训练补题13
Gym102202-训练补题15

← Gym102576-训练补题13 Gym102202-训练补题15→

最近更新
01
深入理解Java虚拟机
03-04
02
DNS工作原理
02-27
03
改用VuePress啦
02-23
更多文章>
Theme by Vdoing | Copyright © 2019-2021
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式