• 题目1273
  • 题目信息
  • 运行结果
  • 本题排行
  • 讨论区

宣传墙

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多。CBA 镇长准备在一条道路南 面 4*N 的墙上做一系列的宣传。为了统一规划,CBA 镇长要求每个宣传栏只能占相邻的两个方格 位置。但这条道路被另一条道路分割成左右两段。CBA 镇长想知道,若每个位置都贴上宣传栏, 左右两段各有有多少种不同的张贴方案。 例如: N=6,M=3, K=2, 左,右边各有 5 种不同的张贴方案


输入
第一行: T 表示以下有 T 组测试数据 ( 1≤T ≤8 )
接下来有T行, 每行三个正整数 N M K 分别表示道路的长度,另一条道路的起点和宽度
(1≤ N ,M ≤ 1 000 000, 1≤ K ≤ 100000)
输出
每组测试数据,输出占一行:两个整数,分别表示左右两段不同的张贴方案数。由于方案总数
可能很大,请输出对 997 取模后的结果。
样例输入
2
6 3 2
5 3 2
样例输出
5 5
5 1
来源

河南省第九届省赛

矩阵快速幂解法,加判断数组,时间超短8ms,内存小8648

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int MOD = 997;
const int MAXN = 16;struct mat
{int A[MAXN][MAXN];mat(){memset(A, 0, sizeof(A));}mat operator * (const mat &a) const{mat b;for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){for (int k = 0; k < MAXN; k++){b.A[i][j] += A[i][k] * a.A[k][j];b.A[i][j] %= MOD;}}}return b;}
};mat map;bool cmp(int i, int j)  //  状态 j 对状态 i 是否可行 j 是 col 列的状态 i 是 col - 1 列的状态
{for (int row = 0; row < 4; row++){if ((i >> row) & 1){if ((j >> row) & 1){
//                if (row == 3)               //  这个特判有没有都行,因为 i >> 4 肯定为 0
//                {                           //  这样不过是思维更严谨些
//                    return false;
//                }if ((i >> (row + 1)) & 1){i -= (1 << (row + 1));  //  等价于 i ^= 1 << (rank + 1),前边的写法不太直观}else{return false;}}else{continue;}}else{if ((j >> row) & 1){continue;}else{return false;}}}return true;
}//  构造单元矩阵
void unit()
{for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){map.A[i][j] = cmp(i, j);}}
}int slove(int n)
{mat a;mat b = map;for (int i = 0; i < MAXN; i++){a.A[i][i] = 1;}while (n){if (n & 1){a = a * b;}b = b * b;n >>= 1;}return a.A[MAXN - 1][MAXN - 1];
}int main ()
{int T;scanf("%d", &T);unit();while (T--){int N, M, K;scanf("%d%d%d", &N, &M, &K);printf("%d %d\n", slove(M - 1), slove(N - M - K + 1));}return 0;
}

状态压缩 DP

滚动数组解法  时间长713ms,内存大 94896

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int col = 4;
int row;
int dp[900000][1<<4];  void dfs(int r,int c,int pre,int now)
{  if(c==col)  {  dp[r][now] += dp[r-1][pre];  dp[r][now] %= 997;  return ;  }  if(c+1<=col)  {  dfs(r,c+1,pre<<1,(now<<1)|1);  dfs(r,c+1,(pre<<1)|1 ,now<<1);  }  if(c+2<=col)  {  dfs(r,c+2,(pre<<2)|3,(now<<2)|3);  }
}
int main()
{  int T,N,M,K;  scanf("%d",&T);  while(T--)  {  scanf("%d%d%d",&N,&M,&K);  row = M - 1;  if(row<=0)  {  printf("0 ");  }  else  {  memset(dp,0,sizeof(dp));  dp[0][(1<<col)-1] = 1;  for(int i=1;i<=row;i++)  {  dfs(i,0,0,0);  }  printf("%d ",dp[row][(1<<col)-1]);  }  row = N - M - K + 1;  if(row<=0)  {  printf("0\n");  }  else  {  memset(dp,0,sizeof(dp));  dp[0][(1<<col)-1] = 1;  for(int i=1;i<=row;i++)  {  dfs(i,0,0,0);  }  printf("%d\n",dp[row][(1<<col)-1]);  }  }  return 0;
}  

nyoj-1273 宣传墙相关推荐

  1. nyoj 1273 宣传墙

    题目链接:点击打开链接 题意:给你一个4*n的矩阵,你有1*2的砖头若干,让你进行铺砖,在中间m ---- m+k的部分你不用铺.问左边和右边的方法数各位多少. 题解:因为数据偏大,需要滚动数组来优化 ...

  2. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151

    本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下.  骨牌覆盖问题 ...

  3. nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  4. NYOJ_1273_宣传墙

    /* 宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的 ...

  5. NYOJ - [第九届河南省程序设计大赛]宣传墙(DP)

    题目链接:http://nyoj.top/problem/1273 内存限制:64MB 时间限制:1000ms 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准 ...

  6. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs

    http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...

  7. 【ACM省赛】第九届河南省程序设计大赛 B 宣传墙

    题目链接:http://nyoj.top/web/contest/problem/cid/13/num/B 题目: 用1*2的地砖,填满4*N的墙,有多少种方案. 题解: 状压dp,枚举每个状态的可能 ...

  8. ZZULIOJ 1924: 宣传墙 (dp)

    时间限制: 1 Sec  内存限制: 128 MB 提交: 53  解决: 16 [提交] [状态] [讨论版] [命题人:admin] 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的 ...

  9. 计算机社团宣传招新活动方案,社团招新策划书范本及活动方案

    社团招新策划书范本及活动方案 新的学期,新的开始,在社团招新活动开始前,如何写策划书呢?以下是小编为大家提供的社团招新策划书范本,供大家参考借鉴! 社团招新策划书范本(一):青年志愿者协会 一.招新目 ...

最新文章

  1. ffmpeg architecture(下)
  2. (一)Android Studio 安装部署 华丽躲坑
  3. DIY Ruby CPU 分析 Part III
  4. 【Python】pycharm去掉代码下的波浪线
  5. 一个关于c++string比较的问题
  6. 如何优雅地使用 VSCode 来编辑 vue 文件?
  7. html5 crosshair,嘿,纯正ROG血统 CROSSHAIR VIII IMPACT (开箱篇)最终版
  8. C++面试题,平时面试不可缺少的!
  9. Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)
  10. Caused by: org.hibernate.HibernateException: unknown Oracle major version [0]
  11. C#反编译工具:ILSpy
  12. 软件工程——软件计划
  13. 游戏辅助,python制作王者荣耀刷金币脚本!
  14. 获取按键精灵论坛网页源文件
  15. 在outlook客户端设置阿里企业邮箱
  16. 使用DNS来屏蔽广告
  17. win8计算机的录音功能,win8电脑录音机功能在哪|win8录音功能使用方法
  18. Linux RS232驱动实验
  19. RSS MSE RMSE之间的关系
  20. 马斯克“超级高铁”成功测速355km|h,不过仅比我国“复兴号”快5km|h

热门文章

  1. wps免费下载 wps文档怎么转成加密的PDF文档呢?
  2. 盘点阿里巴巴 15 款开发者工具 侵删
  3. 通过antd-charts可视化对比科比和詹姆斯谁更强
  4. 为什么程序员难找对象?
  5. 每日三省吾身:2014-1-16
  6. 华为路由器:GRE技术
  7. PDF怎么转换成PPT且可以修改里面的文字
  8. JPA 查询 未查询到时返回的list的size为0 但是引用并不为空
  9. 怎么把PDF拆分开成一张一张的
  10. python之abc和six