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

深圳大型网站建设公司成都seo网站qq

深圳大型网站建设公司,成都seo网站qq,北京城乡建设委官方网站,凤山县住房和城乡建设局网站注意到 n ≤ 12 n \le 12 n≤12,于是乎考虑使用状压 DP。 根据常见的套路,考虑将三维中的两维状压。 不妨设 d p i , s t 1 , s t 2 dp_{i,st1,st2} dpi,st1,st2​ 表示前 i i i 层已经选了恰好 i i i 个点(从题面可以看出每一层仅可能…

注意到 n ≤ 12 n \le 12 n12,于是乎考虑使用状压 DP

根据常见的套路,考虑将三维中的两维状压。

不妨设 d p i , s t 1 , s t 2 dp_{i,st1,st2} dpi,st1,st2 表示前 i i i 层已经选了恰好 i i i 个点(从题面可以看出每一层仅可能选 1 1 1 个点),这 i i i 个点占用 y y y 轴方向的状态为 s t 1 st1 st1,占用 z z z 轴方向的状态为 s t 2 st2 st2


首先有一种朴素的思路:直接枚举 i i i上一层 s t 1 st1 st1 s t 2 st2 st2,然后枚举这一层选择的点。

设目前枚举的第 i i i 层选择的点为 ( i , x , y ) (i,x,y) (i,x,y),状压之后为 w x = 2 x wx=2^x wx=2x w y = 2 y wy=2^y wy=2y,默认 x , y x,y x,y 0 0 0 开始。

转移方程很好写:

d p i , s t 1 ∣ w x , s t 2 ∣ w y = min ⁡ ( d p i , s t 1 ∣ w x , s t 2 ∣ w y , d p i − 1 , s t 1 , s t 2 + a i , x , y ) dp_{i,st1|wx,st2|wy}=\min(dp_{i,st1|wx,st2|wy},dp_{i-1,st1,st2}+a_{i,x,y}) dpi,st1∣wx,st2∣wy=min(dpi,st1∣wx,st2∣wy,dpi1,st1,st2+ai,x,y)

枚举 i , x , y i,x,y i,x,y 需要 O ( n 3 ) O(n^3) O(n3),然后 s t 1 st1 st1 s t 2 st2 st2 又是 O ( 2 2 n ) O(2^{2n}) O(22n)。合起来是过不去的。

需要优化。


我们考虑优化枚举范围:发现 s t 1 st1 st1 实际上取不到那么多, s t 2 st2 st2 也是。具体算一下,在 i i i 固定的情况下,可能的种数正好是 C n i C_{n}^i Cni

于是考虑将 i i i 对应的所有情况都存起来,到时候直接取即可。

for (int i = 1; i < (1 << n); i++)//枚举所有的状态v[__builtin_popcount(i) - 1].push_back(i);//存起来

__builtin_popcount() 是数一个数二进制下的 1 1 1 的位数。

于是我们发现 O ( n 3 × 2 2 n ) O(n^3 \times 2^{2n}) O(n3×22n) 在这种实现方法下是跑不满的,因为 C n i C_{n}^i Cni 的和总共也就 2 n 2^n 2n

#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 12;
int dp[N][(1 << N) + 5][(1 << N) + 5];//注意空间
vector<int> v[N];
int a[N][N][N];int main() {cin >> n;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)for (int k = 0; k < n; k++)cin >> a[i][j][k];for (int i = 1; i < (1 << n); i++)v[__builtin_popcount(i) - 1].push_back(i);for (int i = 0; i < n; i++)for (int j = 0; j < (1 << n); j++)for (int k = 0; k < (1 << n); k++)dp[i][j][k] = 1e9;for (int i = 0; i < n; i++) {if (i == 0) {//注意特判for (int j = 0, wj = 1; j < n; j++, wj *= 2)for (int k = 0, wk = 1; k < n; k++, wk *= 2)dp[i][wj][wk] = min(a[i][j][k], dp[i][wj][wk]);} else {for (auto p1 : v[i - 1])for (int j = 0, wj = 1; j < n; j++, wj *= 2) {if (p1 & wj)continue;for (auto p2 : v[i - 1])for (int k = 0, wk = 1; k < n; k++, wk *= 2) {if (p2 & wk)continue;dp[i][p1 | wj][p2 | wk] = min(dp[i - 1][p1][p2] + a[i][j][k], dp[i][p1 | wj][p2 | wk]);}}}}cout << dp[n - 1][(1 << n) - 1][(1 << n) - 1];return 0;
}
http://www.dtcms.com/wzjs/37352.html

相关文章:

  • 网站开发技术前景最好美工培训
  • 成都网站建设公司湖南岚鸿广州网站关键词推广
  • 淄博网站公司电话网络推广专员岗位职责
  • 请问那个网站做推广好点建站软件可以不通过网络建设吗
  • 兰州电商平台网站建设中国疫情最新数据
  • 男女做爰全过程网站网络营销的类型
  • 我想给图书网站做代理宁波网站seo诊断工具
  • 美丽说网站代码与蘑菇街网站代码是用什么网站语言做的百度快速收录seo工具软件
  • 模板网站下载广东近期新闻
  • 重庆做网站个人中国广告公司前十强
  • 深圳微信网站建设湖南营销型网站建设
  • 武汉建商城网站seo关键词选择及优化
  • 做网站怎么购买主机同城推广引流平台
  • 产品网站免费模板下载新网站怎么做推广
  • 营销建设网站制作win7优化工具哪个好用
  • 网站托管方案成都全网营销推广
  • 烟台酒店网站建设企业邮箱怎么注册
  • 网站租用空间价格seo英文全称
  • 网站pc转移动端代码公司网站建设方案
  • 网站建设下一步计划小说引流推广
  • 德州做网站公司建网站怎么建
  • 设计公司装修效果图整站seo教程
  • 网站建设公司销售搜索最多的关键词的排名
  • 网站怎么做别名买卖网交易平台
  • vs做网站连数据库百度app官方下载安装到手机
  • 网站建设前期准备方案seo现在还有前景吗
  • 河北网站建设联系方式找回今日头条
  • 网站建设怎么弄轮换图片销售技巧和话术
  • 武汉网站服务专门看网站的浏览器
  • 旅游网站的设计方案怎么做一级域名二级域名三级域名的区别