pro:给定N*M的矩阵,现在让你在每一行删去一个位置,然后形成新N*(M-1)的矩阵,问有多少种不同的新的矩阵。需要满足相邻行删去的位置不大于K。

(题目是01矩阵,其实任意矩阵都可以做,本题算法里只关心相邻的是否相同。

sol:dp[i][j]表示从上到下删,删到第i行,第i行删去第j列的不同矩阵方案数。

再用一个same数组去重,same[i][j]表示dp[i][j]和dp[i][j-1]的共同部分,即a[i][j]=a[i][j-1]的公共来源部分。

一直维护dp和same数组即可。

详解请移步:https://blog.csdn.net/CatDsy/article/details/81876341

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=;
int dp[maxn][maxn],same[maxn][maxn];
int sum1[maxn][maxn],sum2[maxn][maxn];
char c[maxn][maxn];
int main()
{
int T,N,M,K,ans;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&N,&M,&K);
rep(i,,N) scanf("%s",c[i]+);
rep(i,,M) {
dp[][i]=;
same[][i]=(i!=&&c[][i]==c[][i-]);
sum1[][i]=sum1[][i-]+dp[][i];
sum2[][i]=sum2[][i-]+same[][i];
}
rep(i,,N){
rep(j,,M) {
dp[i][j]=((sum1[i-][min(M,j+K)]-sum1[i-][max(,j-K-)])%Mod+Mod)%Mod-((sum2[i-][min(M,j+K)]-sum2[i-][max(,j-K)])%Mod+Mod)%Mod;
if(dp[i][j]<) dp[i][j]+=Mod;
if(j==||c[i][j]!=c[i][j-]) same[i][j]=;
else same[i][j]=((sum1[i-][min(M,j+K-)]-sum1[i-][max(,j-K-)])%Mod+Mod)%Mod-((sum2[i-][min(M,j+K-)]-sum2[i-][max(,j-K)])%Mod+Mod)%Mod;
if(same[i][j]<) same[i][j]+=Mod;
sum1[i][j]=(sum1[i][j-]+dp[i][j])%Mod;
sum2[i][j]=(sum2[i][j-]+same[i][j])%Mod;
}
}
ans=;
rep(i,,M) ans=((ans+(dp[N][i]-same[N][i])%Mod)%Mod+Mod)%Mod;
printf("%d\n",ans);
}
return ;
}

最新文章

  1. android小游戏 飞机躲子弹
  2. 什么是https?
  3. Scala on Visual Studio Code
  4. LeetCode:Construct Binary Tree from Inorder and Postorder Traversal,Construct Binary Tree from Preorder and Inorder Traversal
  5. astats日志分析系统
  6. JAVA与C#关于JSON序列化的比较
  7. Ecstore中的微信支付怎么样配置
  8. AngularJs(七) 模块的创建
  9. Linux中的定时任务at、crontab
  10. 使用scrapy爬虫,爬取17k小说网的案例-方法一
  11. Go 初体验 - 反射
  12. 大数开方 ACM-ICPC 2018 焦作赛区网络预赛 J. Participate in E-sports
  13. linux中service XX start与直接运行/usr/bin/xx start的区别
  14. VS2017 调试 Unity3D 脚本
  15. Matlab数据处理——数据的保存和读取方法操作
  16. 深入理解 Vue 组件
  17. Linux gcc编译之-std选项
  18. 带你轻而易举的学习python——八皇后问题
  19. 12种炫酷HTML5 SVG和CSS3表单浮动标签特效
  20. webapi中session为null的解决方案

热门文章

  1. windows服务控制(开启/停止已有服务)
  2. FFMPEG: avformat_find_stream_info()函数
  3. python ConfigParser 读取配置文件
  4. scrapy-redis源码抛析
  5. ORA-00904: 标识符无效——解决方案
  6. 一个servlet处理多个请求(使用Method的反射机制)
  7. Error: Cannot run program &quot;/home/xxx/android_developer_tools/android-ndk-r8/ndk-build.cmd&quot;: Unknown reason
  8. 安装vs2012以后 sql2008不能使用解决办法
  9. Codeforces 1110D Jongmah (DP)
  10. function几种自执行的形式