求有多少个 \(1\) 到 \(n\) 的排列满足恰有 \(k\) 对在排列中相邻的数满足前小于后
\(2 \leq n \leq 500, 0 \leq k \leq (n - 1)\)
f[i][j][k] 表示已经放置了前 i 个数, 放置的第i个数是前i个数中第j大的($ 1\leq\(`j`\)\leq$i),已放置的前i个数形成的所有排列满足恰有 k 对在排列中相邻的数满足前小于后的排列数量。
放置第i+1个数时,第i+1个数是前i+1个数中第j大的,第i个数是严格小于前i个数中第j大的,会为排列增加一对相邻的数满足前小于后,第i个数是大于等于前i个数中第j大的,不会为排列增加一对相邻的数满足前小于后,转移方程为:
显然,后面的和式可以通过前缀和优化的。
时间复杂度为\(O(n^2k)\)。
求\(1\)到\(n\)的排列\(A\) 和 \(B\)的相似度为\(k\)的数量。
相似度计算:\(k = \sum_{i = 2}^{n}[(A_i - A_{i-1})(B_i - B_{i-1}) > 0]\) (\([X] = 1, X 为真,[X] = 0, X为假\))。
\(2 \leq n \leq 100, 0 \leq k \leq (n - 1)\)。
与前一道题相比,这一题只是增加了一维状态。
f[i][a][b][k] 表示排列\(A\),\(B\)已经放置了前 i 个数, 排列\(A\)放置的第i个数在排列\(A\)中是第a大的,排列\(B\)放置的第i个数在排列\(B\)中是第b大的,此时相似度为\(k\)的排列数量。
转移方程为:
和式同样可以使用前缀和来优化。
时间复杂度为\(O(n^4)\)。
int pre[107][107][107], f[107][107][107];
void solve_problem() {
int n, m, P;
std::cin >> n >> m >> P;
auto add = [&](int a, int b) -> int {
a += b;
if ( a >= P ) a -= P;
return a;
};
auto sub = [&](int a, int b) -> int {
a -= b;
if ( a < 0 ) a += P;
return a;
};
auto sum = [&](int n, int x1, int y1, int x2, int y2) -> int {
if (n < 0) return 0;
return add(sub(sub(pre[n][x2][y2], pre[n][x2][y1 - 1]), pre[n][x1 - 1][y2]), pre[n][x1 - 1][y1 - 1]);
};
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++)
for (int h = 0; h <= n; h++)
pre[i][j][h] = f[i][j][h] = 0;
f[0][1][1] = 1;
for (int i = 1; i <= n; i++) {
for (int k = 0; k <= i + 1; k++) {
for (int a = 1; a <= i; a++) {
for (int b = 1; b <= i; b++) {
pre[k][a][b] = add(pre[k][a][b - 1], f[k][a][b]);
}
}
for (int b = 1; b <= i; b++) {
for (int a = 1; a <= i; a++) {
pre[k][a][b] = add(pre[k][a][b], pre[k][a - 1][b]);
}
}
}
for (int k = 0; k <= i + 1; k++) {
for (int a = 1; a <= i + 1; a++) {
for (int b = 1; b <= i + 1; b++) {
f[k][a][b] = add(
add(sum(k - 1, 1, 1, a - 1, b - 1), sum(k - 1, a, b, i, i)),
add(sum(k, 1, b, a - 1, i), sum(k, a, 1, i, b - 1))
);
}
}
}
}
std::cout << sum(m, 1, 1, n, n) << "\n";
}
文章目录前言一、DateSheet讲解及电路图搭建总结前言这篇文章主要向大家介绍ST意法半导体的电流采集芯片INA282的外围电路搭建设计(适用于INA28x系列芯片),希望大家看了此篇文章后能有所收获,那么进入正题。一、DateSheet讲解及电路图搭建在讲解之前,先给大家推荐一个DateSheet查询网站(个人认为挺好用的)http://www.datasheetcatalog.com/ps:没有你查不到的,只有你不知道的好的进入正题!首先在那个网站里搜索INA282芯片数据手册,就会出来一大堆,这里选择的ST意法半导体的。通过数据手册我们可以得知芯片电压采集增益为50V/V。知道电压增益
文章目录前言一、DateSheet讲解及电路图搭建总结前言这篇文章主要向大家介绍ST意法半导体的电流采集芯片INA282的外围电路搭建设计(适用于INA28x系列芯片),希望大家看了此篇文章后能有所收获,那么进入正题。一、DateSheet讲解及电路图搭建在讲解之前,先给大家推荐一个DateSheet查询网站(个人认为挺好用的)http://www.datasheetcatalog.com/ps:没有你查不到的,只有你不知道的好的进入正题!首先在那个网站里搜索INA282芯片数据手册,就会出来一大堆,这里选择的ST意法半导体的。通过数据手册我们可以得知芯片电压采集增益为50V/V。知道电压增益
套路题题意求有多少个\(1\)到\(n\)的排列满足恰有\(k\)对在排列中相邻的数满足前小于后\(2\leqn\leq500,0\leqk\leq(n-1)\)思路f[i][j][k]表示已经放置了前i个数,放置的第i个数是前i个数中第j大的($1\leq\(`j`\)\leq$i),已放置的前i个数形成的所有排列满足恰有k对在排列中相邻的数满足前小于后的排列数量。放置第i+1个数时,第i+1个数是前i+1个数中第j大的,第i个数是严格小于前i个数中第j大的,会为排列增加一对相邻的数满足前小于后,第i个数是大于等于前i个数中第j大的,不会为排列增加一对相邻的数满足前小于后,转移方程为:\[f
套路题题意求有多少个\(1\)到\(n\)的排列满足恰有\(k\)对在排列中相邻的数满足前小于后\(2\leqn\leq500,0\leqk\leq(n-1)\)思路f[i][j][k]表示已经放置了前i个数,放置的第i个数是前i个数中第j大的($1\leq\(`j`\)\leq$i),已放置的前i个数形成的所有排列满足恰有k对在排列中相邻的数满足前小于后的排列数量。放置第i+1个数时,第i+1个数是前i+1个数中第j大的,第i个数是严格小于前i个数中第j大的,会为排列增加一对相邻的数满足前小于后,第i个数是大于等于前i个数中第j大的,不会为排列增加一对相邻的数满足前小于后,转移方程为:\[f