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

2022NAC Advertising ICPC

给出一个 \(n\times m\) 的矩阵,每个格子是 C, I, P, ? 中的一种,问最少有多少个可能的矩阵包含

I C

P C

\(1\leq n,m\leq 8\)

取模 \(998244353\)

从范围很小以及前一行的状态是重要的可以看出是一个状压 dp .

需要注意的点是因为是一个 \(2\times 2\) 的矩阵,所以需要保存前 \(m+1\) 个格子,并且避免重复,需要多花一位 \(0/1\) 表示是否存在过目标小矩阵。

还需要注意的点,列 \(0\) 作为右下角是没办法组成一个合法小矩阵的。

时间复杂度: \(O(nm3^{m+1})\)

空间复杂度: \(O(nm3^{m+1})\)

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int n,m;
char s[10][10];
int Map[70],pw3[10],dp[70][20005][2];
void solv_pw3(){pw3[0]=1;for(int i=1;i<10;i++)pw3[i]=pw3[i-1]*3;
}
bool chk(int state){for(int i=0;i<=m;i++){	if(Map[i]!=-1&&state%3!=Map[i])return false;state/=3;
//		cerr<<i<<endl;} return true;
}
vector<int>get_list(int state){vector<int>result;for(int i=0;i<m+1;i++){result.push_back(state%3);state/=3;}
//    reverse(result.begin(),result.end());return result;
}
int main(){cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++)cin>>s[i][j];for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(s[i][j]=='I')Map[i*m+j]=0;if(s[i][j]=='C')Map[i*m+j]=1;if(s[i][j]=='P')Map[i*m+j]=2;if(s[i][j]=='?')Map[i*m+j]=-1;}
//    for(int i=0;i<n*m;i++)cerr<<Map[i]<<" ";cerr<<endl; if(n<2||m<2){cout<<0<<endl;return 0;}solv_pw3();
//   cerr<<pw3[m+1]<<endl;
//	chk(5);for(int i=0;i<pw3[m+1];i++)if(chk(i)){
//    	cerr<<i<<endl;dp[1*m][i][0]=1;}for(int i=m;i<n*m-1;i++){for(int state=0;state<pw3[m+1];state++)for(int tp=0;tp<2;tp++){if(dp[i][state][tp]==0)continue;
//            if(tp==1)cerr<<i<<","<<state<<","<<tp<<":"<<dp[i][state][tp]<<endl;vector<int>v=get_list(state);
//			if(tp==1){
//				for(auto elem:v)cerr<<elem<<" ";cerr<<endl; 
//			}
//            cerr<<tmp<<endl;	for(int nxt=0;nxt<3;nxt++)if(Map[i+1]==-1||nxt==Map[i+1]){if(v[0]==0&&v[1]==1&&v[m]==2&&nxt==1&&(i+1)%m!=0){dp[i+1][state/3+nxt*pw3[m]][1]+=dp[i][state][tp];dp[i+1][state/3+nxt*pw3[m]][1]%=mod;}else{dp[i+1][state/3+nxt*pw3[m]][tp]+=dp[i][state][tp];dp[i+1][state/3+nxt*pw3[m]][tp]%=mod;}}}}   int ans=0;for(int state=0;state<pw3[m+1];state++){ans+=dp[n*m-1][state][1];ans%=mod;} cout<<ans<<endl;return 0;
}
/*
2 3
???
???
*/ 
/*
3 3
???
???
???
*/ 
/*
3 2
??
??
??
*/ 
/*
2 4 
????
????
*/ 
/*
3 2
I?
??
??
*/
/*
3 2
I?
I?
??
*/
/*
2 2
I?
I?
*/ 
/*
8 8
????????
????????
????????
????????
????????
????????
????????
????????
*/

时隔接近4年重新写中文blog,果真 oi 还是当作爱好的时候才是最开心的。

上大学真的累死了,每天都活人微死,作业怎么这么多,上课怎么这么快,王者荣耀匹配机制怎么这么烂!!!

http://www.jsqmd.com/news/324122/

相关文章:

  • Java Web 志同道合交友网站系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 封装,继承,多态
  • 当Python遇上商业交付,如何通过原生代码加密为AI算法筑牢保险库
  • 基于SpringBoot+Vue的+周边游平台管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 全新软件与模型优化为 NVIDIA DGX Spark 注入强大动力
  • GNU Parallel 学习笔记 - 总目录
  • 【国内配置openclaw发消息到手机】【免费】方案,仅支持iphone手机
  • 2026优选硅胶垫生产厂家/eva垫生产厂家汇总分析
  • 【openclaw部署与使用之问题速查速决系列】openclaw的升级与Peekaboo的安装和授权办法(macOS)
  • 2026优选亚克力胶生产厂家/纳米双面胶厂家/泡棉双面胶厂家,精密胶粘赋能多行业组装
  • 罗德与施瓦茨ZV-Z229校准件
  • Keysight(是德科技)66332A(原 Agilent 66332A)是一款专为移动通信产品测试设计的单路输出系统直流电源
  • 2026年评价高的装修公司/威海装修公司口碑参考榜
  • Java异常处理
  • 3m双面胶生产厂家推荐:2026专业双面胶生产厂家—精密胶粘解决方案的可靠选择
  • 数据库编程技术
  • 2026年口碑好的威海装修公司案例/威海装修公司设计行业情况参考榜
  • 2026专业优选模切定制厂家/麦拉片生产厂家/绝缘片生产厂家汇总盘点
  • 2026江苏移液吸头厂家推荐盘点
  • 江苏医疗实验室耗材厂家/江苏pet采血管生产厂家怎么选?2026精选厂家汇总盘点
  • 【无用之美】每个浪漫主义者的身边都要有一个现实主义的朋友,让他不要离这个世界太远。每个现实主义者身边都要有一个浪漫主义的朋友,让他还记得自己生而为人而非机器
  • OLAP架构类型
  • 江苏医用试管生产厂家需要具备哪些特点优势?2026江苏医疗尿杯厂家推荐分析
  • Python语法进阶笔记(七)
  • Amino-PEG37-COOH,氨基-三十七聚乙二醇-羧基使用体验报告
  • 2026年靠谱的钎焊热处理厂家选购参考建议
  • 2026年河北唐山湿法脱硫实力厂商综合评估报告
  • 国内排名前列的RTO设备厂家怎么选?2026RTO工程案例较多公司推荐分析
  • 前后端分离+周边游平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 前后端分离志同道合交友网站系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程