HDU - 6416 :Rikka with Seam(DP & 前缀和 & 数学)
2024-09-30 22:57:01
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 ;
}
最新文章
- android小游戏 飞机躲子弹
- 什么是https?
- Scala on Visual Studio Code
- LeetCode:Construct Binary Tree from Inorder and Postorder Traversal,Construct Binary Tree from Preorder and Inorder Traversal
- astats日志分析系统
- JAVA与C#关于JSON序列化的比较
- Ecstore中的微信支付怎么样配置
- AngularJs(七) 模块的创建
- Linux中的定时任务at、crontab
- 使用scrapy爬虫,爬取17k小说网的案例-方法一
- Go 初体验 - 反射
- 大数开方 ACM-ICPC 2018 焦作赛区网络预赛 J. Participate in E-sports
- linux中service XX start与直接运行/usr/bin/xx start的区别
- VS2017 调试 Unity3D 脚本
- Matlab数据处理——数据的保存和读取方法操作
- 深入理解 Vue 组件
- Linux gcc编译之-std选项
- 带你轻而易举的学习python——八皇后问题
- 12种炫酷HTML5 SVG和CSS3表单浮动标签特效
- webapi中session为null的解决方案
热门文章
- windows服务控制(开启/停止已有服务)
- FFMPEG: avformat_find_stream_info()函数
- python ConfigParser 读取配置文件
- scrapy-redis源码抛析
- ORA-00904: 标识符无效——解决方案
- 一个servlet处理多个请求(使用Method的反射机制)
- Error: Cannot run program ";/home/xxx/android_developer_tools/android-ndk-r8/ndk-build.cmd";: Unknown reason
- 安装vs2012以后 sql2008不能使用解决办法
- Codeforces 1110D Jongmah (DP)
- function几种自执行的形式