Commit fc6e2a57 authored by 24OI-bot's avatar 24OI-bot
Browse files

style: format markdown files with remark-lint

parent 2edf8472
Loading
Loading
Loading
Loading
+54 −50
Original line number Diff line number Diff line
当出现形如“给定$n$个整数,求这m个整数能拼凑出多少的其他整数($n$个整数可以重复取)”,以及“给定$n$个整数,求这$n$个整数不能拼凑出的最小(最大)的整数”的问题时可以使用同余最短路的方法。
当出现形如“给定 $n$ 个整数,求这 m 个整数能拼凑出多少的其他整数$n$ 个整数可以重复取”,以及“给定 $n$ 个整数,求这 $n$ 个整数不能拼凑出的最小(最大)的整数”的问题时可以使用同余最短路的方法。

同余最短路利用同余来构造一些状态,可以达到优化空间复杂度的目的。

@@ -7,7 +7,7 @@
## 例题

???+note "[P3403 跳楼机](https://www.luogu.com.cn/problem/P3403)"
    题目大意: 给定$x,y,z,h$,对于$k \in [1,h]$ ,有多少个$k$能够满足$ax+by+cz=k$。
    题目大意给定 $x,y,z,h$ ,对于 $k \in [1,h]$ ,有多少个 $k$ 能够满足 $ax+by+cz=k$ 

不妨假设 $x < y < z$ 。

@@ -19,7 +19,7 @@

-  $i \xrightarrow{z} (i+z) \mod x$ 

注意通常选取一组$a_i$中最小的那个数对它取模,也就是此处的$x$,这样可以尽量减小空间复杂度(剩余系最小)
注意通常选取一组 $a_i$ 中最小的那个数对它取模,也就是此处的 $x$ ,这样可以尽量减小空间复杂度剩余系最小

那么实际上相当于执行了最短路中的建边操作:

@@ -63,7 +63,8 @@ $$
      vis[1] = 1;
      q.push(1);
      while (!q.empty()) {
            int u = q.front();q.pop();
        int u = q.front();
        q.pop();
        vis[u] = 0;
        for (int i = head[u]; i; i = e[i].next) {
          int v = e[i].to, w = e[i].w;
@@ -82,7 +83,10 @@ $$
      memset(dis, INF, sizeof(dis));
      scanf("%lld", &h);
      scanf("%lld %lld %lld", &x, &y, &z);
        if (x == 1 || y == 1 || z == 1) {printf("%d\n", h); return 0;}
      if (x == 1 || y == 1 || z == 1) {
        printf("%d\n", h);
        return 0;
      }
      for (int i = 0; i < x; i++) {
        add(i, (i + z) % x, z);
        add(i, (i + y) % x, y);
@@ -103,6 +107,6 @@ $$

 [洛谷 P2662 牛场围栏](https://www.luogu.com.cn/problem/P2662) 

[[国家集训队] 墨墨的等式](https://www.luogu.com.cn/problem/P2371)
 [\[国家集训队\] 墨墨的等式](https://www.luogu.com.cn/problem/P2371) 

 [「NOIP2018」货币系统](https://loj.ac/problem/2951)