首页 > TAG信息列表 > P2704
P2704 [NOI2001] 炮兵阵地 -状态压缩dp -省选
#include <bits/stdc++.h> #define debug(x) std::cerr << "Line: " << __LINE__ << \ "," << #x << "=" << x << "\n" using ll = long long; constexpr in洛谷P2704题解
题面 可恨的getchar。 一般的状压dp。 因为空间不够开 \(100\times 2^{10} \times 2^{10}\) ,所以我们使用滚动数组。 如何滚动呢?我们在记录行数的那一维全部 \(\operatorname{mod}3\) 即可。因为当前行的状态只取决于前两行的状态。 然后就是一个非常板子的dp了。可以参考这个。【Luogu P2704】[NOI2001] 炮兵阵地
炮兵阵地: 链接: 洛谷 题目大意: 在一个棋盘上,一个棋子上下左右相邻两格内不能有别的棋,且棋子不能放在一些格子内。求最多的棋子数。 正文: 设 \(f_{i,j,k}\) 表示第 \(i\) 行的状态是 \(j\) 和前一行的状态是 \(k\) 的方案数。显然有: \[f_{i,j,k}=\max_l\{f_{i-1,k,l}+\mathrm{num}(j题解 P2704 [NOI2001] 炮兵阵地
题目描述 Link 给定一张 \(n\times m\) 的网格,求这张网格上最多能放多少个炮兵。 网格上有一些地方不能放炮;炮兵的攻击范围是前、后、左、右各 \(2\) 格。 \(1 \leq n \leq 100 ,1 \leq m \leq 10\) 。 Solution 发现 \(m\) 很小,且第 \(i\) 行的状态之和 \(i-1,i-2\) 行有关,考虑状《洛谷P2704 [NOI2001]炮兵阵地》
非常细细细的一题。 首先,这数据量显然是状压。 dp[i][j][k] 表示 到第i行,第i行状态为j,第i - 1行状态未k的最大方案数。 我们从上向下考虑的话,每个放置的棋子会被上面两行棋子的放置状态所影响。 所以我们每次转移的时候需要枚举上面的两行。 这样的话复杂度就是 n * m * m * m。Luogu P2704 [NOI2001]炮兵阵地
题目描述 司令部的将军们打算在\(N\times M\)的网格地图上部署他们的炮兵部队。一个\(N\times M\)的地图由\(N\)行\(M\)列组成,地图的每一格可能是山地(用“\(H\)” 表示),也可能是平原(用“\(P\)”表示),如下图。 在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一Luogu P2704 [NOI2001]炮兵阵地
gate 还是状压dp... 因为int开成bool了de了好久,最后还是wjh帮忙看出来的qaq f[i][k][j]代表第i行,状态为j,上一行状态为k,上上行的状态为kk 四重循环,保证j,k、j,kk、k,kk不冲突的前提下,有: f[i][k][j] = max(f[i][kk][k] + sum[j]) 因为状态太多了存不下,所以只要把可行的状态记录状压dp--P2704
状压dp--P2704 题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范状压dp:luogu P2704 [NOI2001]炮兵阵地
https://www.luogu.org/problemnew/show/P2704 知识点:1.滚动数组:取模实现 2.位运算优先级最低 顾是if(!(a&b))而不是if(!a&b) code: #include <bits/stdc++.h>#define N 101#define M 10using namespace std;int n,m;int tot = 0洛谷P2704 [NOI2001]炮兵阵地
https://www.luogu.org/problemnew/show/P2704 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一