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

什么网站做任务上海网站设计大连

什么网站做任务,上海网站设计大连,wordpress 微信商城模板,泰安集团题目描述 小 L 有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为 1∼n。花园 1 和 n 是相邻的。 他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则:任意相邻 m 个花圃中都只有不超过 k 个 C 形的花圃&#xf…

题目描述
小 L 有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为 1∼n。花园 1 和 n 是相邻的。

他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则:任意相邻 m 个花圃中都只有不超过 k 个 C 形的花圃,其余花圃均为 P 形的花圃。

例如,若 n=10 , m=5 , k=3 ,则

  • CCPCPPPPCC 是一种不符合规则的花圃。
  • CCPPPPCPCP 是一种符合规则的花圃。

请帮小 L 求出符合规则的花园种数对 109+7 取模的结果。

输入格式

只有一行三个整数,分别表示 n,m,k。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1复制

10 5 3

输出 #1复制

458

输入 #2复制

6 2 1

输出 #2复制

18

思路:

 

先考虑普通的DP,因为 m≤5,可以状压。

从第二个样例来看,m=2,k=1,有状态

00→{_00_01​01→{_10​10→{_00_01​

可以知道前状态的最右几位要和后状态相同,不过最前面的一位被挤出去了,有没有摆C花没有关系, 01 皆可,因此设前状态为 i,后状态为 j,可以得到 i,j 关系:

i={j>>1(j>>1) ∣ (1<<(m−1))​

另设 f[i][j] 为到第 i 盆花,前面 m 盆的状态为 j,可以由上面的关系得到DP方程:

f[i][j]=f[i][j]+{f[i−1][j>>1]f[i−1][(j>>1) ∣ (1<<(m−1))​

需要判一下第二个转移的前状态是否合法。

然后要处理环形的问题,可以简单的短环成链,然后对于给定初状态 f[0][s] ,统计DP后的 f[n][s] 计入答案。这是因为这样对于一个长度为 n 的环, i=0 和 i=n 是等价的,所以 j0​,jn​ 相同的时候就是一个合法的环。

依照这个思路写出40分代码:


#include <bits/stdc++.h>int f[100000][1 << 5];
int n, m, K;
int t, ans;
int main() {n = read(); m = read(); K = read();t = (1 << m) - 1;for (int statu = 0; statu <= t; ++statu) {if (__builtin_popcount(statu) > K) continue;memset(f, 0, sizeof(f));f[0][statu] = 1;for (int i = 1; i <= n; ++i) {for (int j = 0; j <= t; ++j) {f[i][j] += f[i - 1][j >> 1];if (__builtin_popcount((j >> 1) | (1 << (m - 1))) <= K)f[i][j] += f[i - 1][(j >> 1) | (1 << (m - 1))];}}ans += f[n][statu];}printf("%d\n", ans);return 0;
}
\\ 不知道__builtin_popcount() 的可以自行百度,这是好东西

然后想着 f[i][j] 只和 f[i−1][k] 有关,所以第一维 [i] 可以滚动优化掉,然后按照这个 n 的范围肯定是得上矩阵乘法的,试着构造转移矩阵。还是以上面的 m=2,k=1 为例,状态转移还是一样的,设 f[i] 为状态为 i 时的方案数, 由 f[i] 推出 f′[i] ,就是下一轮的 f[i];

对于任意的 m,k,也可以通过前后 i,j 两个状态的关系,令转移矩阵中的 mat[i][j]=1,构造出转移矩阵。

另外还有一点,对于之前每一个状态做一遍DP,现在我们有了矩阵,就没有必要对于 f[0][0]=1,f[0][1]=1,…,f[0][(1<<m)−1] 各做一次的必要了,可以把初始矩阵的第一维利用起来,即令 f[0][0]=1,f[1][1]=1,…,f[i][i]=1 可以让每一种初状态并行处理,每一行中就是我们要的初状态只有一种的一轮DP。然而根据矩阵乘法的性质,这个矩阵乘上任意矩阵都等于所乘的矩阵,也就是说是一个单位矩阵,所以乘不乘没差,那么我们所求的答案就是转移矩阵自乘之后 ∑i=02m−1​mat[i][i]。

AC代码:

#include <bits/stdc++.h>
typedef long long lint;inline lint read() {lint x = 0, f = 0; char c = getchar();for (; c < '0' || c > '9'; c = getchar()) if (c == '-') f = 1;for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);return f ? -x : x;
}const int p = 1e9 + 7;
lint n;
int m, K;
int t, ans;struct mat {int row, col;int a[32][32];mat() {memset(a, 0, sizeof(a));}void init() {*this = mat();row = col = t;for (int i = 0; i < t; ++i)a[i][i] = 1;}mat operator * (const mat &x) const {mat ans = mat(); ans.row = row; ans.col = col;for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j)for (int k = 0; k < col; ++k)(ans.a[i][j] += (1ll * a[i][k] * x.a[k][j]) % p) %= p;return ans;}mat operator ^ (lint n) {mat ans = mat(); ans.init();mat base = *this;for (; n; n >>= 1, base = base * base)if (n & 1) ans = ans * base;return ans;}
} ;int main() {n = read(); m = read(); K = read();t = 1 << m;mat b = mat(); b.row = b.col = t;for (int i = 0, j; i < t; ++i) {if (__builtin_popcount(i) > K) continue;j = i >> 1;// j -> ib.a[j][i] = 1;j = (i >> 1) | (1 << (m - 1));if (__builtin_popcount(j) <= K)b.a[j][i] = 1;}mat c = (b ^ n);for (int i = 0; i < t; ++i) {ans = (ans + c.a[i][i]) % p;}printf("%d\n", ans);return 0;
}


文章转载自:

http://0dcbWPJ4.nbsbn.cn
http://V9hsQpnx.nbsbn.cn
http://mv5nt1wa.nbsbn.cn
http://d3eQzgsK.nbsbn.cn
http://g5ViVNud.nbsbn.cn
http://sBYfFxDG.nbsbn.cn
http://BXt7wChP.nbsbn.cn
http://urUT2AVt.nbsbn.cn
http://Alsen6gq.nbsbn.cn
http://dUTJZwhB.nbsbn.cn
http://Yks2Rxzy.nbsbn.cn
http://ndHFVcDO.nbsbn.cn
http://T1qImtvp.nbsbn.cn
http://Ai4CyuI5.nbsbn.cn
http://dRZwk043.nbsbn.cn
http://TrmRFHtj.nbsbn.cn
http://hxRpYlKK.nbsbn.cn
http://NjRmjqFV.nbsbn.cn
http://GRTpAl0r.nbsbn.cn
http://SX5V3st1.nbsbn.cn
http://ByQ27vNm.nbsbn.cn
http://bjh1znmY.nbsbn.cn
http://guD9Fgeg.nbsbn.cn
http://X5F9wDDY.nbsbn.cn
http://b2lS7jG5.nbsbn.cn
http://nQrhNIbc.nbsbn.cn
http://KO3u9gty.nbsbn.cn
http://GX2ibkLS.nbsbn.cn
http://SsUwZA7H.nbsbn.cn
http://Q4FxGKik.nbsbn.cn
http://www.dtcms.com/wzjs/733794.html

相关文章:

  • 广州代做公司网站电脑网站 发展移动端
  • 自建网站国家审核要多久wordpress.org 移除
  • 做商城网站系统网站开发线上销售技巧
  • 全国新农村建设中心网站潍坊做网站多少钱
  • 苏州市建设局网站地址谷歌有趣的网站
  • 怎样建立一个简单的网站wordpress直播播放器
  • 易语言做试用点击网站网页建站专业公司
  • 网站建设问题分类和排除方法分析网站集约化 建设方案
  • 建设国际网站百度网站怎样优化排名
  • 怎么知道网站被百度k了留言板网站建设总结
  • 定制网站的好处南翔企业网站开发建设
  • 沧州网站建设专业的公司4000-262-安徽科技网站建设
  • 网站定制myeclipse怎样做网站
  • 我爱深圳网站设计南宁智慧人社app官方下载
  • 邯郸专业网站建设建网站要多长时间
  • 如何在网站做引流备案 多个网站
  • 开办 网站建设费 科目企业网站建设排名
  • 58同城合肥网站建设高端网站建设如何收费
  • 人防pc网站开发计划书设计公司注册资金多少合适
  • 建俄语网站汉服网站的建设
  • 网站主体负责人和网站负责人游戏代理加盟
  • 百度官方网站怎么做如何推广自己的个人网站呢
  • 网站做优化按点击收费陕西省住房和城乡建设厅网官网
  • 高端房产网站建设棋牌软件制作开发多少钱
  • 装饰网站建设价格合肥网站建设哪个公司做得比较好
  • 唐山网站建设|唐山网站制作|公司建站666起|唐山红城网络为什么很多中国人去菲律宾做网站
  • 整站系统旅游公司网站建设策划书
  • 网站首页快照不更新网站制作怎样快速
  • 宁波企业网站制作公司网站建设源码
  • 专业的模板建站企业wordpress 恋月