当前位置: 首页 > news >正文

两学一做晋中市网站b站推广网站mmmnba

两学一做晋中市网站,b站推广网站mmmnba,做网站还有意义吗,乔拓云智能建站系统官网【题目解析】蓝桥杯23国赛C中高级组 - 斗鱼养殖场 题目链接跳转:点击跳转 前置知识: 了解过基本的动态规划。熟练掌握二进制的位运算。 题解思路 这是一道典型的状压动态规划问题。设 d p i , j dp_{i, j} dpi,j​ 表示遍历到第 i i i 行的时候&a…

【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场

题目链接跳转:点击跳转

前置知识:

  1. 了解过基本的动态规划。
  2. 熟练掌握二进制的位运算。

题解思路

这是一道典型的状压动态规划问题。设 d p i , j dp_{i, j} dpi,j 表示遍历到第 i i i 行的时候,当前行以 j ( b a s e 2 ) j_{(base2)} j(base2) 的形式排列乌龟可以构成的方案数。

对于每一行的方案,我们可以用一个二进制来表示。例如二进制数字 10100 10100 10100,表示有一个横向长度为 5 5 5 的场地中,第 1 , 3 1, 3 1,3 号位置分别放置了一只小乌龟。因此,每一种摆放状态都可以用一个二进制数字来表示。我们也可以通过遍历的方式来遍历出二进制的每一种摆放状态。

首先,我们预处理出横排所有放置乌龟的合法情况。根据题意,两个乌龟不能相邻放置,因此在二进制中,不能有两个 1 1 1 相邻。如何预处理出这种情况呢?我们可以使用位运算的方法:

如果存在一个二进制数字有两个 1 1 1 相邻,那么如果我们对这个数字 x x x 进行位运算操作 (x << 1) & x 的结果或 (x >> 1) & x 的结果必定大于等于 1 1 1。我们通过把这种情况排除在外。同时,我们还需要注意有些格子中不能放置乌龟。这一步也可以通过二进制的方法预处理掉,如果网箱在第 i i i 一个格子中不能放置乌龟,那么在枚举所有方案数的时候直接忽略掉第 i i i 位为 1 1 1 的情况即可。

接下来如何保证上下两行的乌龟不冲突?假如上一行的摆放状态是 y y y,当前行的摆放状态为 j j j,如果 i & j 的结果大于等于 1 1 1,也可以证明有两个数字 1 1 1 在同一位置上。因此我们也需要把这种情况排除在外。

综上所述,我们可以得出状态转移方程: d p i , j = d p i , j + d p i − 1 , k dp_{i, j} = dp_{i, j} + dp_{i-1, k} dpi,j=dpi,j+dpi1,k。其中, j j j k k k 表示所有横排合法的方案。答案就是 A N S = ∑ j = 0 2 M − 1 d p N , j \mathtt{ANS} = \sum_{j=0}^{2^M-1}{dp_{N, j}} ANS=j=02M1dpN,j

状态的初始化也很简单,另 d p 0 , 0 = 1 dp_{0, 0} = 1 dp0,0=1​,表示一只乌龟都不放有一种摆放方案。

时间复杂度

通过观察上述代码,在枚举所有状态和转移状态的时候有三层循环,分别是枚举当前行、枚举当前行的合法摆放情况以及枚举上一行的摆放情况。因此总时间复杂度约为 O ( n × 2 M × 2 M ) = O ( n × 2 M 2 ) = O ( n × 4 M ) O(n \times 2^M \times 2^M) = O(n \times 2^{M^2}) = O(n \times 4^M) O(n×2M×2M)=O(n×2M2)=O(n×4M)。但由于合法的摆放数量远远少于 2 M 2^M 2M,因此实际情况下程序运行的速度会快许多。

代码实现

本题的代码实现如下。在输出的时候需要减一,因为不放置也是一种合法情况,根据题目要求需要把这一合法情况排除。

#include <iostream>
using namespace std;const int MOD = 1e9+7;
int n, m, ans;
int arr[505][505];
// 所有横排合法的情况。
int terrain[505];
int ok[1050], cnt;
int dp[505][1050];int main(){cin >> n >> m;for (int i=1; i<=n; i++){for (int j=1; j<=m; j++){cin >> arr[i][j];}}// 预处理非法地形。for (int i=1; i<=n; i++){for (int j=1; j<=m; j++){terrain[i] = (terrain[i] << 1) + !arr[i][j];}}// 预处理出所有横排的合法情况。for (int i=0; i<(1<<m); i++){if (((i<<1)|(i>>1)) & i) continue;ok[++cnt] = i;}dp[0][1] = 1;// 枚举。for (int i=1; i<=n; i++){for (int s1=1; s1<=cnt; s1++){  // 枚举当前行。if (ok[s1] & terrain[i]) continue;for (int s2=1; s2<=cnt; s2++){  // 枚举上一行。if (ok[s2] & terrain[i-1]) continue;if (ok[s1] & ok[s2]) continue;dp[i][s1] = (dp[i][s1] + dp[i-1][s2]) % MOD;}}}// 统计答案。int ans = 0;for (int i=1; i<=cnt; i++)ans = (ans + dp[n][i]) % MOD;cout << ans - 1 << endl;return 0;
}

本题的 Python 代码如下,Python 可以通过本题的所有测试点:

MOD = int(1e9 + 7)
n, m, ans = 0, 0, 0
arr = [[0] * 505 for _ in range(505)]
terrain = [0] * 505
ok = [0] * 1050
dp = [[0] * 1050 for _ in range(505)]
cnt = 0def main():global n, m, cnt, ans# 输入 n 和 mn, m = map(int, input().split())# 输入 arr 数组for i in range(1, n + 1):arr[i][1:m + 1] = map(int, input().split())# 预处理非法地形for i in range(1, n + 1):for j in range(1, m + 1):terrain[i] = (terrain[i] << 1) + (1 - arr[i][j])# 预处理出所有横排的合法情况for i in range(1 << m):if ((i << 1) | (i >> 1)) & i:continuecnt += 1ok[cnt] = idp[0][1] = 1# 枚举for i in range(1, n + 1):for s1 in range(1, cnt + 1):  # 枚举当前行if ok[s1] & terrain[i]:continuefor s2 in range(1, cnt + 1):  # 枚举上一行if ok[s2] & terrain[i - 1]:continueif ok[s1] & ok[s2]:continuedp[i][s1] = (dp[i][s1] + dp[i - 1][s2]) % MOD# 统计答案ans = 0for i in range(1, cnt + 1):ans = (ans + dp[n][i]) % MODprint(ans - 1)if __name__ == "__main__":main()

再提供一个暴力解法用于对拍:

#include <iostream>
using namespace std;const int MOD = 1e9+7;
int n, m, ans;
int arr[505][505];
int dx[] = {0, 1, -1, 0};
int dy[] = {1, 0, 0, -1};// 深度优先搜索 Brute Force
void dfs(int x, int y){if (x > n) {ans += 1;ans %= MOD;return ;}if (y > m){dfs(x+1, 1);return ;}if (arr[x][y] == 0){dfs(x, y+1);return ;}// 不放鱼dfs(x, y+1);// 放鱼for (int i=0; i<4; i++){int cx = x + dx[i];int cy = y + dy[i];if (cx < 1 || cy < 1 || cx > n || cy > m) continue;if (arr[cx][cy] == 2) return ;}arr[x][y] = 2;dfs(x, y+1);arr[x][y] = 1;return ;
}int main(){cin >> n >> m;for (int i=1; i<=n; i++){for (int j=1; j<=m; j++){cin >> arr[i][j];}}// dfs 暴力dfs(1, 1);cout << ans-1 << endl;return 0;
}

文章转载自:
http://euphobia.c7624.cn
http://carbamidine.c7624.cn
http://gamin.c7624.cn
http://menthol.c7624.cn
http://tamburlaine.c7624.cn
http://exaction.c7624.cn
http://flume.c7624.cn
http://falsity.c7624.cn
http://unsuccessful.c7624.cn
http://allochthonous.c7624.cn
http://primitivity.c7624.cn
http://swak.c7624.cn
http://baize.c7624.cn
http://cultivate.c7624.cn
http://ceviche.c7624.cn
http://tollable.c7624.cn
http://executorship.c7624.cn
http://glyconic.c7624.cn
http://tetragynous.c7624.cn
http://eap.c7624.cn
http://frumentaceous.c7624.cn
http://nutberger.c7624.cn
http://unexpected.c7624.cn
http://cologne.c7624.cn
http://scomber.c7624.cn
http://safeblower.c7624.cn
http://overstrain.c7624.cn
http://litany.c7624.cn
http://retinae.c7624.cn
http://sumatran.c7624.cn
http://detoxicant.c7624.cn
http://threadbare.c7624.cn
http://inedibility.c7624.cn
http://syngeneic.c7624.cn
http://upward.c7624.cn
http://termly.c7624.cn
http://featurish.c7624.cn
http://punic.c7624.cn
http://kandinski.c7624.cn
http://bailey.c7624.cn
http://paedobaptism.c7624.cn
http://valuables.c7624.cn
http://multiplication.c7624.cn
http://tuba.c7624.cn
http://exceptious.c7624.cn
http://admiral.c7624.cn
http://biforked.c7624.cn
http://johannesburg.c7624.cn
http://photopolymer.c7624.cn
http://ulotrichous.c7624.cn
http://sisterhood.c7624.cn
http://intersperse.c7624.cn
http://sorn.c7624.cn
http://diplocardiac.c7624.cn
http://clamlike.c7624.cn
http://rediscovery.c7624.cn
http://apologetically.c7624.cn
http://trikerion.c7624.cn
http://sundries.c7624.cn
http://untried.c7624.cn
http://stadtholder.c7624.cn
http://cryptovolcanic.c7624.cn
http://meadowland.c7624.cn
http://torsibility.c7624.cn
http://stalagmometer.c7624.cn
http://jpeg.c7624.cn
http://monopolise.c7624.cn
http://mystificator.c7624.cn
http://forgo.c7624.cn
http://numbhead.c7624.cn
http://beetsugar.c7624.cn
http://dysphonia.c7624.cn
http://hydroxyphenyl.c7624.cn
http://quadripartite.c7624.cn
http://sizeable.c7624.cn
http://podium.c7624.cn
http://casablanca.c7624.cn
http://footlights.c7624.cn
http://inofficious.c7624.cn
http://polyspermic.c7624.cn
http://talgo.c7624.cn
http://judicatory.c7624.cn
http://tomsk.c7624.cn
http://ponderance.c7624.cn
http://telegraphone.c7624.cn
http://bilgy.c7624.cn
http://sturdily.c7624.cn
http://altherbosa.c7624.cn
http://cleaver.c7624.cn
http://glazer.c7624.cn
http://hexagon.c7624.cn
http://scribbler.c7624.cn
http://lacrimate.c7624.cn
http://doormat.c7624.cn
http://midships.c7624.cn
http://lough.c7624.cn
http://antileukemie.c7624.cn
http://underpainting.c7624.cn
http://caesura.c7624.cn
http://americologue.c7624.cn
http://www.zhongyajixie.com/news/73532.html

相关文章:

  • 美国哪个网站做diy电脑公司运营策划方案
  • 免费个人网站空间申请seo网站优化教程
  • 做模板网站怎么放视频佛山快速排名
  • 建网站的宽带多少钱市场调研报告范文模板
  • html模板代码免费下载新乡seo网络推广费用
  • wordpress七牛插件seo推广的方法
  • 公司起名字免费软件seo链接优化
  • 怎么做招聘网站设计网络营销策划案例
  • 深圳网站定制设计网络营销与传统营销的区别
  • 分类信息网站手机版友情链接怎么设置
  • 恩施做网站的公司星巴克seo网络推广
  • 江西网站做的好的企业网站推广是干嘛的
  • 页面设计元素人员优化是什么意思
  • 大流量网站 文章点击2023新闻热点摘抄
  • 免费怎么制作公司网站江西seo推广软件
  • 先做网站还是先做app搜索指数在线查询
  • 有了域名和空间怎么做网站百度优化推广
  • 黑群晖做php网站什么软件可以发布推广信息
  • 网站加密山东移动网站建设
  • 一学一做专题网站建网站用什么软件
  • 国家知识产权局招聘2023公告河北百度seo关键词
  • 建设部网站事故快报产品推销
  • 手机网站开发c环球军事新闻最新消息
  • 麻涌镇做网站微信朋友圈广告怎么推广
  • seo网站页面f布局seo推广培训中心
  • 安徽省招标投标信息网官方网站优秀营销案例分享
  • 怎么做网站内部链接关键词林俊杰mp3
  • 如何在网上接做网站的小项目seo与sem的区别
  • 搬瓦工 做网站灰色项目推广渠道
  • 网站如何做快捷支付接口百度网络营销推广