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

昌平网站制作开发公司做我女朋网站源码

昌平网站制作开发公司,做我女朋网站源码,免费咨询会计,用服务器ip做网站域名题目大意:有两种积木块,I型和L型,给定一段2*N的画布,问摆满总共有多少种方式? 解法:状态压缩dp(强烈建议拿个笔跟着画一下状态,慢慢就懂了) 首先我们规定一下此题解中提…

题目大意:有两种积木块,I型和L型,给定一段2*N的画布,问摆满总共有多少种方式?

解法:状态压缩dp(强烈建议拿个笔跟着画一下状态,慢慢就懂了)

首先我们规定一下此题解中提到的状态:
在第i列中会有两格(因为2*N),0表示未被占,1表示被占了,即如果两个格子都未被占则表示00,上面的未被占,下面的被占了表示01;同理10表示上面被占,下面未被占,11表示全都被占

另外,一旦发生状态转移,那么一定会让当前的列被占满!(为了防止重复情况,所以需要规定当前列占满,也可以规定下一列占满),这里看不懂先跳过,后面就看懂了

解题思路:
1.定义状态数组f[i][j]:i表示当前的位置,j表示当前位置的状态,f[i][j]表示在前i-1已经摆满的前提下总共有多少中摆放方式

2.构建转移数组g[j][k]:j表示转移前的状态,也就是当前(第i列)状态;k表示转移后i+1列的状态
(1)对于转移前第i列会有四种状态即00,01,10,11(再次强调i-1列已经满了,第i列可能被占是因为放i-1列的时候“不小心”占用了它,这也是为什么上面要规定发生状态转移,当前列被占满)
(2)前提:一旦发生状态转移就要填满第i列!那么如果当前列为00,我们便有四种摆放方式把它填满,自己动手画一下,加深理解!四种方式摆放完对应的i+1列也会有四种状态,所以第i列摆放为00的时候,可以让i+1出现00,01,10,11四种情况!后面的用下面的二维表格表示

00011011
001111
010011
100101
111000

由此也可得我们的转移数组g[4][4],而00,01,10,11在二进制转十进制中刚好对应0123

3.状态转移公式:f[i+1][k]+=f[i][j]*g[j][k],首先理清这里面的i,j,k都是什么。f[i+1][k]就已经是下一个状态了,即第i列摆满,且i+1列的状态为k。而后面的f[i][j]*g[j][k],即f[i][j]想变成f[i+1][k],就必须满足g[][]!=0才行,因为g[][]=1才表示可以转移到f[i+1][k]状态啊!

4.关于状态数组的初始化,f[1][0]=1,我们一开始放的时候其实就相当于第0列以及被铺满,且第1列一个没放;初始化为1,这个地方我是通过自己推到前几项得来的!

5.循环:首先是列数的循环,第i列的时候,我们得到的是i+1,而初始化为1,所以我们遍历为1~n;其次就是每一列可能出现的四种状态j和四种摆放方式k的循环

下面的代码里面也有解释,如果还不懂就结合代码来看或许会简单不少QWQ

#include<bits/stdc++.h>
using namespace std;
using ll=long long;const int N = 1e7+5;
const int MOD = 1e9+7;int n;
int g[4][4]={{1,1,1,1},{0,0,1,1},{0,1,0,1},{1,0,0,0},
};//g[当前状态][转移状态]
//转移状态:在i放满的前提下i+1的状态int f[N][4];//状态转移数组
//f[i][j]表示前i-1已经放满,j表示第i列状态,00,01,10,11分别对应0,1,2,3
//f[i][j]的值就是到此时的个数              int main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;f[1][0]=1;//初始化初始状态,下一个状态是对第一列进行摆放,相当于第0列全部占满了for(int i=1;i<=n;i++)//1~n的状态对应初始状态~最终的前一个状态{for(int j=0;j<4;j++)//遍历四种第i列的四种状态,即00,01,10,11{for(int k=0;k<4;k++)//遍历状态转移{f[i+1][k]=(f[i+1][k]+f[i][j]*g[j][k])%MOD;}}}cout<<f[n+1][0];//n列放满,且n+1列当前状态为00,即什么也不放return 0;
}

另外还是有些优化的
1.滚动数组优化:我写到下面的代码里面吧,这样更直观!
2.乘法相比于加减更耗时间,我们可以在进行状态转移的时候,可以先判断g[][]是否为1,详见代码吧!
 

#include<bits/stdc++.h>
using namespace std;
using ll=long long;const int N = 1e7+5;
const int MOD = 1e9+7;int n;
int g[4][4]={{1,1,1,1},{0,0,1,1},{0,1,0,1},{1,0,0,0},
};
//优化为滚动数组
//1.将初始的f[N][4]改为f[2][4]
//2.将所有的f[这个位置&1][]即可
//3,记得每一轮状态转移开始前,将下一个状态对应的数组元素初始化为0
int f[2][4];             int main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;f[1][0]=1;for(int i=1;i<=n;i++){memset(f[i+1&1],0,sizeof f[0]);// 将下一个状态对应的数组元素初始化为 0// (i + 1) & 1 确定要操作的是 f[0] 还是 f[1]// sizeof f[0] 表示要初始化的字节数for(int j=0;j<4;j++){for(int k=0;k<4;k++){if(g[j][k])//判断是否为1,为1进行下面的状态转移f[i+1&1][k]=(f[i+1&1][k]+f[i&1][j])%MOD;}}}cout<<f[n+1&1][0];return 0;
}


文章转载自:

http://DMqXveJm.tstkr.cn
http://yIz9tdIl.tstkr.cn
http://7qh8epjQ.tstkr.cn
http://c8PyDM4c.tstkr.cn
http://gTJYfp4F.tstkr.cn
http://LTnLuzJz.tstkr.cn
http://n7c1uEaj.tstkr.cn
http://lWhqqFRi.tstkr.cn
http://4XxHl1Hn.tstkr.cn
http://C5fdxn15.tstkr.cn
http://E1Rf5tYQ.tstkr.cn
http://GbEFQJXt.tstkr.cn
http://if19eqlY.tstkr.cn
http://la3SE6z2.tstkr.cn
http://TQtdCmOL.tstkr.cn
http://GJnX53GT.tstkr.cn
http://UjkbH7lt.tstkr.cn
http://6mPKnbzL.tstkr.cn
http://TwpnDpZ5.tstkr.cn
http://T8CNfVOz.tstkr.cn
http://APYIaYOQ.tstkr.cn
http://xmuj3UO7.tstkr.cn
http://9dirgpD5.tstkr.cn
http://zDKrFbGp.tstkr.cn
http://somdsgnH.tstkr.cn
http://7MKYS4ui.tstkr.cn
http://7QcM9Z1S.tstkr.cn
http://TonYDZby.tstkr.cn
http://eSKDl46h.tstkr.cn
http://gsway6dh.tstkr.cn
http://www.dtcms.com/wzjs/658829.html

相关文章:

  • 大连网站模板建站网站设计公司 南京
  • 建筑公司网站设计思路泉州网站建站公司
  • 购物网站建设好处wordpress 问答 主题 knowhow
  • 金山网站制作响应式网站设计图
  • 电子商城网站开发公司wordpress kallyas
  • 大家都用哪个网站做读书笔记各个做网站的有什么区别
  • 免费网站域名申请做调查用哪个网站
  • 做网站容易挣钱吗建安证查询网站
  • 公司建设网站的 计划书黄岩区建设规划局网站
  • 资海集团网站建设简洁的企业网站
  • 网站建设三站合一wordpress置顶失效
  • 六安网站推广wordpress custom login
  • 讯美深圳网站建设python做的网站
  • 用网站做淘宝客平台如何做推广
  • 网站建设最新教程wordpress娱乐主题yeti 1.9.2
  • 最大郑州网站建设公司石家庄学校网站建设
  • dw用层还是表格做网站快商务电子是学什么的
  • 网站宽度 超宽网站抓取压力高
  • 美食 网站模板wordpress 域名更改 页面链接
  • 做网站应达到什么效果如何建网址
  • 专做正品 网站iis wordpress 多站点
  • 网站网页制作公司一个网站的建设需要哪些流程图
  • 网站建设方案500字网页设计页面布局有哪些
  • 网站建设制作公司国内访问wordpress
  • 网页与网站设计什么是整体造型怎么创造软件app
  • 多少钱可以做网站果洛营销网站建设
  • visual studio2005做网站网站建设服务亮点
  • 建设用地规划公示在哪个网站查苏州建设工程材料信息价
  • 男女做爰视频免费网站怎样建一个自己的网站
  • 景德镇市城市建设规划网站建设企业网站源码