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

外贸建站平台哪家好网站制作公司怎么样

外贸建站平台哪家好,网站制作公司怎么样,网站开发协议,珠海制作企业网站状态压缩DP 定义 状态压缩 DP 是一种通过二进制压缩状态的动态规划算法。它通过使用位运算来加速状态的转移和计算,从而提高算法的效率。 注意事项 数据范围:状态压缩 DP 通常适用于数据范围较小的问题,因为它需要使用二进制来表示状态&a…

状态压缩DP

定义

状态压缩 DP 是一种通过二进制压缩状态的动态规划算法。它通过使用位运算来加速状态的转移和计算,从而提高算法的效率。

注意事项

  1. 数据范围:状态压缩 DP 通常适用于数据范围较小的问题,因为它需要使用二进制来表示状态,所以状态数量会随着数据范围的增加而呈指数级增长。
  2. 位运算:位运算在状态压缩 DP 中非常常用,需要熟练掌握位运算的基本操作,如与、或、异或、左移、右移等。
  3. 状态表示:选择合适的状态表示方式非常重要,需要根据问题的特点和要求来设计状态。一般来说,可以使用二进制数来表示状态,其中每一位表示一个元素的选择情况。
  4. 状态转移:状态转移是状态压缩 DP 的核心,需要根据问题的逻辑来设计状态转移方程。在状态转移过程中,需要注意边界情况和特殊情况的处理。
  5. 初始化:正确的初始化状态非常重要,需要根据问题的要求来初始化状态。一般来说,可以将初始状态设置为全 0 或全 1。
  6. 空间复杂度:状态压缩 DP 通常需要使用较大的空间来存储状态,因此需要注意空间复杂度的控制。可以通过滚动数组、压缩状态等方式来减少空间的使用。

解题思路

  1. 确定状态:根据问题的要求,确定需要使用的状态。状态可以是一个整数、一个二进制数或一个数组等。
  2. 设计状态转移方程:根据问题的逻辑,设计状态转移方程。状态转移方程描述了从一个状态到另一个状态的转移方式。
  3. 初始化状态:根据问题的要求,初始化状态。初始化状态通常是一个边界情况或特殊情况。
  4. 进行状态转移:使用状态转移方程,从初始状态开始,逐步进行状态转移,计算出每个状态的值。
  5. 输出结果:根据问题的要求,输出最终的结果。

状态压缩 DP 解决背包问题的一般步骤

  1. 确定状态:使用二进制数来表示背包的状态,每个物品的选择情况用一位二进制位表示,1 表示选择该物品,0 表示不选择。
  2. 设计状态转移方程:根据背包问题的逻辑,确定状态之间的转移关系。通常,状态转移方程会涉及到当前状态、上一个状态以及物品的选择情况。
  3. 初始化状态:根据问题的要求,初始化状态。通常,初始状态为全 0 或全 1。
  4. 进行状态转移:使用状态转移方程,从初始状态开始,逐步进行状态转移,计算出每个状态的值。
  5. 输出结果:根据问题的要求,输出最终的结果。

AcWing 327. 玉米田

题目描述

327. 玉米田 - AcWing题库

运行代码

#include <iostream>
#include <vector>
using namespace std;
const int N = 14, M = 1 << 12, mod = 1e8;
int n, m;
int w[N];
vector<int> state;
vector<int> head[M];
int f[N][M];
bool check(int x)
{return !(x & x << 1);
}
int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++)for(int j = 0; j < m; j ++){int t;cin >> t;w[i] += !t << j;}for(int i = 0; i < 1 << m; i ++)if(check(i)) state.push_back(i);for(int i = 0; i < state.size(); i ++)for(int j = 0; j < state.size(); j ++){int a = state[i], b = state[j];if(!(a & b)) head[i].push_back(j);}f[0][0] = 1;    for(int i = 1; i <= n + 1; i ++)for(int j = 0; j < state.size(); j ++)if(!(state[j] & w[i]))for(auto k : head[j])f[i][j] = (f[i][j] + f[i - 1][k]) % mod;cout << f[n + 1][0] << endl;return 0;
}#include <iostream>
#include <vector>
using namespace std;
const int N = 14, M = 1 << 12, mod = 1e8;
int n, m;
int w[N];
vector<int> state;
vector<int> head[M];
int f[N][M];
bool check(int x)
{return !(x & x << 1);
}
int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++)for(int j = 0; j < m; j ++){int t;cin >> t;w[i] += !t << j;}for(int i = 0; i < 1 << m; i ++)if(check(i)) state.push_back(i);for(int i = 0; i < state.size(); i ++)for(int j = 0; j < state.size(); j ++){int a = state[i], b = state[j];if(!(a & b)) head[i].push_back(j);}f[0][0] = 1;    for(int i = 1; i <= n + 1; i ++)for(int j = 0; j < state.size(); j ++)if(!(state[j] & w[i]))for(auto k : head[j])f[i][j] = (f[i][j] + f[i - 1][k]) % mod;cout << f[n + 1][0] << endl;return 0;
}

代码思路

  • 首先读入行数 n 和列数 m 以及土地的状况,将不可种植的情况转化为一个整数表示。
  • 通过 check 函数判断一个状态是否满足相邻位没有同时为 1 的条件,将满足条件的状态存入 state 向量。
  • 构建状态之间的关联关系,将没有冲突的状态对存入 head 数组。
  • 然后通过动态规划,从第一行开始逐步计算每个状态下的种植方法数,利用之前的状态和关联关系进行递推。

改进思路

  • 可以考虑对一些重复的计算进行缓存或优化,提高效率。
  • 代码的结构和逻辑可以进一步整理和优化,增强可读性。

改进代码

#include <iostream>
#include <vector>
using namespace std;
const int N = 14, M = 1 << 12, mod = 1e8;int n, m;
int w[N];
vector<int> state;
vector<int> head[M];
int f[N][M];bool check(int x) {return!(x & x << 1);
}void init() {for(int i = 0; i < 1 << m; i ++)if(check(i)) state.push_back(i);for(int i = 0; i < state.size(); i ++)for(int j = 0; j < state.size(); j ++) {int a = state[i], b = state[j];if(!(a & b)) head[i].push_back(j);}
}int main() {cin >> n >> m;for(int i = 1; i <= n; i ++)for(int j = 0; j < m; j ++) {int t;cin >> t;w[i] +=!t << j;}init();f[0][0] = 1;    for(int i = 1; i <= n + 1; i ++)for(int j = 0; j < state.size(); j ++)if(!(state[j] & w[i]))for(auto k : head[j])f[i][j] = (f[i][j] + f[i - 1][k]) % mod;cout << f[n + 1][0] << endl;return 0;
}
http://www.hkea.cn/news/323002/

相关文章:

  • 怎么用网站做文案百度推广可以自己开户吗
  • 做的好的新闻网站排名优化
  • 购物网站开发功能百度联盟个人怎么接广告
  • 网站如何盈利流量费网站seo搜索引擎的原理是什么
  • 泰安房产价格最新域名年龄对seo的影响
  • 网站打不开怎么回事引流推广平台有哪些
  • 课程网站建设特色成都seo外包
  • 建设厅安全员证书查询网站外链seo推广
  • 邢台手机网站建设服务百度查重软件
  • 网站开发开题报告ppt竞价运营是做什么的
  • 网站代理怎么做的网站推广策划思路
  • 长沙网站seo公司百度权重5的网站能卖多少钱
  • 常德网站开发百度推广登录首页网址
  • 网站建设软件设计推广官网
  • 网站运营阶段站长之家app
  • discuz网站标题百度广告推广价格
  • 广州学校论坛网站建设疫情排行榜最新消息
  • 古董手表网站网络营销的主要方式和技巧
  • 做公司网站要那些资料百度电脑版下载官方
  • 定州网站建设公司企业网站源码
  • 0基础1小时网站建设教程如何给自己的公司建网站
  • 成都网站建设s1emens电商平台怎么加入
  • 六合哪家做网站建设域名注册查询软件
  • 网站建设的方案费用2023年新冠疫情最新消息
  • 九星市场做网站快速将网站seo
  • 长春做网站推广的公司提升神马关键词排名报价
  • 金融网站cms百度网盘客服电话人工服务
  • 美观网站建设物美价廉seo网站优化专员
  • 网站设计应该怎么做推广软文代写
  • 网站建设工作室发展百度收录教程